#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[800005];
struct segtree{
vector<int>info[800005];
void pull(int st,int en,int i){
int m=(st+en)/2;
int par=(m-st+1)%2;
info[i][0]=(info[i*2][0]^info[i*2+1][par]);
info[i][1]=(info[i*2][1]^info[i*2+1][par^1]);
}
vector<int> wtf(vector<int>l,vector<int>r,int par){
vector<int>ans(2);
ans[0]=(l[0]^r[par]);
ans[1]=(l[1]^r[par^1]);
return ans;
}
void build(int st,int en,int i){
info[i].resize(2);
if(st==en){
info[i][0]=a[st];
info[i][1]=0;
return;
}
int m=(st+en)/2;
build(st,m,i*2);
build(m+1,en,i*2+1);
pull(st,en,i);
//cerr<<"sten:"<<st<<" "<<en<<" "<<i<<':'<<info[i][0]<<" "<<info[i][1]<<'\n';
}
void upd(int st,int en,int i,int pos,int val){
if(st>pos||en<pos)return;
if(st==en){
info[i][0]=val;
info[i][1]=0;
return;
}
int m=(st+en)/2;
upd(st,m,i*2,pos,val);
upd(m+1,en,i*2+1,pos,val);
pull(st,en,i);
//cerr<<"upsten:"<<st<<" "<<en<<" "<<i<<':'<<info[i][0]<<" "<<info[i][1]<<'\n';
}
vector<int> fans(int st,int en,int i,int l,int r){
if(st>=l&&en<=r)return info[i];
int m=(st+en)/2;
if(r<=m)return fans(st,m,i*2,l,r);
else if(l>=m+1)return fans(m+1,en,i*2+1,l,r);
return wtf(fans(st,m,i*2,l,r),fans(m+1,en,i*2+1,l,r),(m-l+1)%2);
}
}tr;
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int n,q;cin>>n>>q;
for(int i=1;i<=n;i++)cin>>a[i];
tr.build(1,n,1);
for(int i=0;i<q;i++){
int t;cin>>t;
if(t==1){
int a,b;cin>>a>>b;
tr.upd(1,n,1,a,b);
}else{
int a,b;cin>>a>>b;
auto x=tr.fans(1,n,1,a,b);
//cerr<<"QR:"<<x[0]<<" "<<x[1]<<"\n";
if((b-a+1)%2==0){
cout<<0<<"\n";
}else{
cout<<x[0]<<"\n";
}
}
}
}