时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
            空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
             64bit IO Format: %lld
        
     
    题目描述
        
        
    
            
            在心理疏导室中有一种奇特的疏导工具,叫做红球。红球被提前分为了许多正方形小方格。
 每当有人来找ATB做心理疏导时,ATB就会让他去先玩红球,然后通过红球小格方的高度来判断一个人的压力程度的高低
 具体地讲,ATB会让该人对于一个序列执行以下操作
 1. 区间求和,即输入l,r,输出

 2. 区间异或,即输入l,r,k,对于l ≤ i ≤ r,将x
i变为

 可是ATB天天算计那么多答案,已经对这份工作产生了厌烦,所以请你帮帮他,对于一组给定的数据,输出对应的答案
 ATB会将你感谢到爆
 
                            输入描述:
                                                    第一行两个整数n和m,表示数列长度和询问次数
第二行有n个整数,表示这个数列的初始数值
接下来有m行,形如 1 l r 或者 2 l r k
分别表示查询
或者对于l ≤ i ≤ r,将xi变为
                                                                            输出描述:
                                                    对于每一个查询操作,输出查询的结果并换行
                                                                            
                        
                            示例1
                        
                        
                            
                                输入
                                复制
                                
                                
                                    10 10
8 5 8 9 3 9 8 3 3 6 
2 1 4 1
1 2 6 
2 9 10 8
1 1 7 
2 4 7 8
2 8 8 6
2 2 3 0
1 1 2 
2 9 10 4
1 2 3 
                                 
                             
                            
                                                     
                     
                                                        备注:
                1. 数据范围
对于
的数据,保证 n, m, k≤ 10
对于另外
的数据,保证 n, m ≤ 50000, k ∈ {0, 1}
对于全部

的数据,保证 1 ≤ n,m ≤ 10
5, 0≤ a
i,k ≤ 10
52. 说明
表示