#include <bits/stdc++.h>
using namespace std;
#define int long long
#define f first
#define ss second
#define ina insert
#define pb push_back
const int N=2e5+5;
int seg_1[4*N];
int seg_2[4*N];
int bati;
void update_1(int idx,int l,int r, int i, int x){
if(r-l==1){
seg_1[idx]=x;
return;
}
if((l+r)/2>i){
update_1(idx*2,l,(l+r)/2,i,x);
}
else{
update_1(idx*2+1,(l+r)/2,r,i,x);
}
seg_1[idx]=seg_1[idx*2]^seg_1[idx*2+1];
}
void update_2(int idx,int l,int r, int i, int x){
if(r-l==1){
seg_2[idx]=x;
return;
}
if((l+r)/2>i){
update_2(idx*2,l,(l+r)/2,i,x);
}
else{
update_2(idx*2+1,(l+r)/2,r,i,x);
}
seg_2[idx]=seg_2[idx*2]^seg_2[idx*2+1];
}
int sum_1(int idx,int l,int r,int a,int b){
if(a>=r || b<=l){
//bati^=0;
return 0;
}
if(l>=a && r<=b){
//bati^=seg[idx];
return seg_1[idx];
}
int s1=sum_1(idx*2,l,(l+r)/2,a,b);
int s2=sum_1(idx*2+1,(l+r)/2,r,a,b);
// bati^=s1;
// bati^=s2;
return s1^s2;
}
int sum_2(int idx,int l,int r,int a,int b){
if(a>=r || b<=l){
//bati^=0;
return 0;
}
if(l>=a && r<=b){
//bati^=seg[idx];
return seg_2[idx];
}
int s1=sum_2(idx*2,l,(l+r)/2,a,b);
int s2=sum_2(idx*2+1,(l+r)/2,r,a,b);
// bati^=s1;
// bati^=s2;
return s1^s2;
}
signed main(){
int n,t;
cin>>n>>t;
int x[n+1];
for(int i=1; i<=n; i++){
cin>>x[i];
if(i%2==1)update_1(1,1,n+1,i,x[i]);
else{
update_2(1,1,n+1,i,x[i]);
}
}
// int k=3^2;
// cout<<k<<endl;
//cout<<sum(1,1,n+1,1,n)<<endl;
// cout<<bati<<endl;
for(int q=0; q<t; q++){
int a;
cin>>a;
if(a==1){
int b,c;
cin>>b>>c;
if(b%2==1)update_1(1,1,n+1,b,c);
else{
update_2(1,1,n+1,b,c);
}
}
else{
int b,c;
cin>>b>>c;
if((c-b+1)%2==0){
cout<<0<<endl;
continue;
}
//bati=0;
int ans=0;
if(b%2==1)ans=sum_1(1,1,n+1,b,c+1);
else ans=sum_2(1,1,n+1,b,c+1);
cout<<ans<<endl;
}
}
}
/*
3 3
1 2 3
2 1 3
1 1 3
2 1 3
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
*/