#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int , int>
#define fi first
#define se second
#define endl '\n'
#define faster ios_base :: sync_with_stdio(false); cin.tie(NULL);
int n , q;
const int N = 2e5 + 5;
int a[N];
int st[4 * N][2];
void update(int idx , int l , int r , int pos , int v , int type) {
if(l == r) {
st[idx][type] = v;
return;
}
int mid = (l + r) / 2;
if(mid >= pos) update(2 * idx , l , mid , pos , v , type);
else update(2 * idx + 1 , mid + 1 , r , pos , v , type);
st[idx][type] = st[2 * idx][type] ^ st[2 * idx + 1][type];
}
int get(int idx , int l , int r , int u , int v , int type) {
if(l > v || r < u) return 0;
if(u <= l && r <= v) {
return st[idx][type];
}
int mid = (l + r) / 2;
return get(2 * idx , l , mid , u , v , type) ^ get(2 * idx + 1 , mid + 1 , r , u , v , type);
}
void solve () {
cin >> n >> q;
for(int i = 1 ; i <= n ; i ++ ) {
cin >> a[i];
if(i % 2 == 0) {
update(1 , 1 , n , i , a[i] , 0);
}
else{
update(1 , 1 , n , i , a[i] , 1);
}
}
while(q--) {
int t; cin >> t;
if(t == 1) {
int u , v; cin >> u >> v;
if(u % 2 == 0){
update(1 , 1 , n , u , v , 0);
}
if(u % 2 == 1) {
update(1 , 1 , n , u , v , 1);
}
}
else{
int l , r ; cin >> l >> r;
if(r % 2 != l % 2) {
cout << 0 << endl;
}
else {
if(r % 2 == 0) {
cout << get(1 , 1 , n , l , r , 0) << endl;
}
else{
cout << get(1 , 1 , n , l , r , 1) << endl;
}
}
}
}
}
main () {
faster;
solve();
return 0;
}