Sub1,2,3 WA
Sub4,5 RE
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll evm = 0,odm = 0,n,q;
ll Eveb[100010],Oddb[100010];
ll Evt[100010],Odt[100010];
#define lowbit(x) (x&-x)
void Eveadd(ll id,ll x){
while(id<=evm){
Evt[id] = Evt[id]^Eveb[id]^x;
id+=lowbit(id);
}
Eveb[id] = x;
}
void Oddadd(ll id,ll x){
while(id<=odm){
Odt[id] = Odt[id]^Oddb[id]^x;
id+=lowbit(id);
}
Oddb[id] = x;
}
ll Evesum(ll id){
int res = 0;
while(id>=0){
res^=Evt[id];
id-=lowbit(id);
}
return res;
}
ll Oddsum(ll id){
int res = 0;
while(id>=0){
res^=Odt[id];
id-=lowbit(id);
}
return res;
}
int main(){
freopen("huBoy.txt","r",stdin);
freopen("resul.cpp","w",stdout);
scanf("%lld%lld",&n,&q);
for(ll i = 1; i <= n; i++){
ll x;
scanf("%lld",&x);
if(i&1){
odm++;
Oddadd(odm,x);
} else {
evm++;
Eveadd(evm,x);
}
}
while(q--){
ll l,r,op;
scanf("%lld%lld%lld",&op,&l,&r);
if(op==2){
if((l&1)^(r&1)) puts("0");
else if(l&1){
printf("%lld\n",Odt[(r+1)/2]^Odt[(l-1)/2]);
} else {
printf("%lld\n",Evt[r/2]^Evt[(l-1)/2]);
}
} else {
if(l&1) Oddadd((l+1)/2,r);
else Eveadd(l/2,r);
}
}
return 0;
}