#include <bits/stdc++.h>
using namespace std;
int to[1<<19],te[1<<19];
void update(int v,int l,int r,int idx,int val){
if(l==r){
if(idx%2) to[v]=val;
else te[v]=val;
return;
}
int mid = (l+r)/2;
if(idx<=mid) update(2*v,l,mid,idx,val);
else update(2*v+1,mid+1,r,idx,val);
to[v]=to[2*v]^to[2*v+1];
te[v]=te[2*v]^te[2*v+1];
}
int rangesum(int *t,int v,int l,int r,int s,int e){
if(e<l || r<s) return 0;
if(s<=l && r<=e) return t[v];
int mid=(l+r)/2;
return rangesum(t,2*v,l,mid,s,e)^rangesum(t,2*v+1,mid+1,r,s,e);
}
int main(){
int n,q,i,v,t,l,u;
scanf("%d %d",&n,&q);
for(i=1;i<=n;i++){
scanf("%d",&v);
update(1,1,n,i,v);
}
while(q--){
scanf("%d %d %d",&t,&l,&u);
if(t==1) update(1,1,n,l,u);
else{
if(u%2 != l%2) printf("0\n");
else if(u%2==0) printf("%d\n",rangesum(te,1,1,n,l,u));
else printf("%d\n",rangesum(to,1,1,n,l,u));
}
}
return 0;
}