#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 2e5+5;
int okl[MAXN], okr[MAXN];
void upd1(int idx, int val) {
while(idx <= MAXN) {
okl[idx]^=val;
idx+= idx&(-idx);
}
}
int get1(int idx){
int sum = 0;
while(idx > 0 ){
sum ^= okl[idx];
idx -= idx&(-idx);
}
return sum;
}
void upd2(int idx, int val) {
while(idx <= MAXN) {
okr[idx]^=val;
idx+= idx&(-idx);
}
}
int get2(int idx){
int sum = 0;
while(idx > 0 ){
sum ^= okr[idx];
idx -= idx&(-idx);
}
return sum;
}
signed main() {
int n, q;
cin >> n >> q;
int a[n];
for(int i = 1; i <= n ; i++) {
int x;
cin >>x;
a[i] = x;
if(i%2==0) upd2(i, x);
else upd1(i, x);
}
while(q--) {
int t;
cin >> t;
if(t==1) {
int l, r;
cin >> l >> r;
int r1 = r;
r = r^a[l];
a[l] = r1;
if(l%2==0) upd2(l, r);
else upd1(l, r);
}
else {
int l , r;
cin >> l >> r;
if((r-l+1)%2==0) {
cout << 0<<endl;
continue;
}
if(l%2==0) cout << (get2(r)^get2(l-1)) << endl;
else cout << (get1(r)^get1(l-1)) << endl;
}
}
}