#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 = sum(b)^sum(a-1);
if(b-2>=a+1)v^=sum(b-2)*sum(a+1);
std::cout << v << '\n';
}
}
}