#include <bits/stdc++.h>
#pragma GCC optimize("O3")
const long long INF = 0x3f3f3f3f3f3f3f3f;
const long long llinf = LLONG_MAX;
const int inf = INT_MAX;
const int nmax = 1e5 + 5;
const int mod = 1e9 + 7;
using namespace std;
int n, m, i, x, st[5 * (1 << 17)];
void upd(int nod, int l, int r, int p, int v, int lvl) {
  if (l == r) {
    st[nod] = v;
    return;
  }
  int mid = (l + r) / 2;
  if (p <= mid)
    upd(nod * 2, l, mid, p, v, lvl - 1);
  else
    upd(nod * 2 + 1, mid + 1, r, p, v, lvl - 1);
  if (lvl & 1)
    st[nod] = st[nod * 2] | st[nod * 2 + 1];
  else
    st[nod] = st[nod * 2] ^ st[nod * 2 + 1];
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cerr.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (i = 1; i <= (1 << n); i++) {
    cin >> x;
    upd(1, 1, (1 << n), i, x, n);
  }
  while (m--) {
    cin >> i >> x;
    upd(1, 1, (1 << n), i, x, n);
    cout << st[1] << endl;
  }
  return 0;
}
