#include <bits/stdc++.h>
#define int long long
//extremely overengineered solution
int fwk[200010];
int value[200010];
void updateIn(int idx,int v){
while(idx<=200000)fwk[idx]^=v,idx+=idx&-idx;
}
void update(int idx,int v){
updateIn(idx,value[idx]);
updateIn(idx,v);
value[idx]=v;
}
int sum(int idx){
int sum=0;
while(idx>0)sum^=fwk[idx],idx-=idx&-idx;
return sum;
}
signed main() {
int n,q;
std::cin >> n >> q;
for(int i=1;i<=n;i++){
int in;
std::cin >> in;
update(i,in);
// for(int i=0;i<=n;i++)std::cout << fwk[i] << ' ';
// std::cout << '\n';
}
while(q--){
for(int i=0;i<=n;i++)std::cout << sum(i) << ',' ;
std::cout << '\n';
int t,a,b;
std::cin >> t >> a >> b;
if(t==1){
update(a,b);
}
else{
int v = 0;
int x1=0,x2=0,x3=0;
if(b-a+1>=3)x1^=sum(b)^sum(a-1);
if(b-a+1>=4)x1^=sum(b-1)^sum(a);
if(b-a+1>=5)x1^=sum(b-2)^sum(a+1);
if(b-a+1>=2)x2^=sum(b)^sum(a-1);
if(b-a+1>=3)x2^=sum(b-1)^sum(a);
if(b-a+1>=1)x3^=sum(b)^sum(a-1);
v=x1^x2^x3;
//std::cout << "(" << x1 << ' ' << x2 << ' ' << x3 << ' ' << v << ")\n";
std::cout << v << '\n';
}
}
}
/*
5 6
1 2 3 4 5
2 1 3
1 1 3
2 1 5
2 4 4
1 1 1
2 4 4
*/