#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int int_fast64_t
#define ul uint_fast32_t
#define ll int_fast64_t
#define dll long double
#define ull uint_fast64_t
#define spektar this_thread::sleep_for(chrono::milliseconds(50))
int log2floor(ull n){ return 63-__builtin_clzll(n); }
const int MAX=2e5+5;
vector<int> seqtree(4*MAX);
vector<int> seqtree1(4*MAX);
//vector<int> lazy(4*MAX);
void build(int v,int l,int r,vector<int>& k){
if(l==r){
if(l%2){
seqtree[v]=k[l-1];
seqtree1[v]=0;
}
else{
seqtree[v]=0;
seqtree1[v]=k[l-1];
}
}
else{
int m=(l+r)/2;
build(2*v,l,m,k);
build(2*v+1,m+1,r,k);
seqtree[v]=seqtree[2*v]^seqtree[2*v+1];
seqtree1[v]=seqtree1[2*v]^seqtree1[2*v+1];
}
}
/*
void push(int v,int l,int r){
seqtree[v]+=lazy[v]*(r-l+1);
if(l!=r){
lazy[2*v]+=lazy[v];
lazy[2*v+1]+=lazy[v];
}
lazy[v]=0;
}
*/
void upd(int v,int l,int r,vector<int>& k,int a){
if(l==r){
if(l%2){
seqtree[v]=k[l-1];
seqtree1[v]=0;
}
else{
seqtree[v]=0;
seqtree1[v]=k[l-1];
}
}
else{
int m=(l+r)/2;
if(a<=m) upd(2*v,l,m,k,a);
else upd(2*v+1,m+1,r,k,a);
seqtree[v]=seqtree[2*v]^seqtree[2*v+1];
seqtree1[v]=seqtree1[2*v]^seqtree1[2*v+1];
}
}
/*
void upd(int v,int l,int r,vector<int>& k,int l1,int r1,int a){
if(l>=l1 && r<=r1){
lazy[v]+=a;
push(v,l,r);
}
else{
if(lazy[v]>0) push(v,l,r);
int m=(l+r)/2;
if(!(l>r1 || m<l1)) upd(2*v,l,m,k,l1,r1,a);
if(!(m+1>r1 || r<l1)) upd(2*v+1,m+1,r,k,l1,r1,a);
seqtree[v]=seqtree[2*v]+seqtree[2*v+1];
}
}
*/
int ask(int v,int l,int r,int l1,int r1){
//if(lazy[v]>0) push(v,l,r);
if(r<l1 || l>r1) return 0;
if(l1<=l && r<=r1){
if(l1%2==1) return seqtree[v];
else return seqtree1[v];
}
else{
int m=(l+r)/2;
return ask(2*v,l,m,l1,r1)^ask(2*v+1,m+1,r,l1,r1);
}
}
void solve(){
int n,m;
cin >> n >> m;
vector<int> k(n);
for(auto& i:k) cin >> i;
build(1,1,n,k);
for(int i=0; i<m; i++){
int a,b,c;
cin >> a >> b >> c;
if(a==1){
k[b-1]=c;
upd(1,1,n,k,b);
}
else{
if((c-b)%2) cout << 0 << endl;
else cout << ask(1,1,n,b,c) << endl;
}
}
}
signed main(){
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
//cin >> t;
while(t--){
solve();
}
}