#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+5;
int seg1[4*MAXN], seg2[4*MAXN];
void update1(int ind, int l, int r, int i, int x)
{
if(r-l==1) {seg1[ind]=x; return; }
if((l+r)/2>i) update1(ind*2, l, (l+r)/2, i, x);
else update1(ind*2+1, (l+r)/2, r, i, x);
seg1[ind]=seg1[ind*2]^seg1[ind*2+1];
}
void update2(int ind, int l, int r, int i, int x)
{
if(r-l==1) {seg2[ind]=x; return;}
if((l+r)/2>i) update2(ind*2, l, (l+r)/2, i, x);
else update2(ind*2+1, (l+r)/2, r, i, x);
seg2[ind]=seg2[ind*2]^seg2[ind*2+1];
}
int sum1(int ind, int l, int r, int a, int b)
{
if(a>=r || b<=l) return 0;
if(l>=a && r<=b) return seg1[ind];
int s1=sum1(ind*2, l, (l+r)/2, a, b);
int s2=sum1(ind*2+1, (l+r)/2, r, a, b);
return s1^s2;
}
int sum2(int ind, int l, int r, int a, int b)
{
if(a>=r || b<=l) return 0;
if(l>=a && r<=b) return seg2[ind];
int s1=sum2(ind*2, l, (l+r)/2, a, b);
int s2=sum2(ind*2+1, (l+r)/2, r, a, b);
return s1^s2;
}
int main()
{
int n, q;
cin>>n>>q;
vector<int> a(n+1);
for(int i=1; i<=n; i++ )
{
cin>>a[i];
if(i%2==1) update1(1, 1, n+1, i, a[i]);
else update2(1, 1, n+1, i, a[i]);
}
for(int i=0; i<q; i++)
{
int a, b, c;
cin>>a>>b>>c;
if(a==1)
{
if(b%2==1) update1(1, 1, n+1, b, c);
else update2(1,1, n+1, b, c);
}
else
if(a==2)
{
if((c-b+1)%2==0) {cout<<"0"<<endl; continue;}
int ans=0;
if(b%2==1) {ans=sum1(1, 1, n+1, b, c+1);}
else {ans=sum2(1, 1, n+1, b, c+1);}
cout<<ans<<endl;
}
}
}