#include <bits/stdc++.h>
using namespace std;
int MOD = 1e9 + 7;
long long INF = 1e18;
int n, m, a[150005];
struct Node {
  int lo, hi, mn, depth;
  Node *lchi, *rchi;
  Node(int l, int r) { lo = l, hi = r; }
};
void segbuild(Node *u) {
  if (u->lo == u->hi) {
    u->mn = a[u->lo];
    u->depth = 0;
  } else {
    int mi = u->lo + u->hi >> 1;
    u->lchi = new Node(u->lo, mi);
    u->rchi = new Node(mi + 1, u->hi);
    segbuild(u->lchi);
    segbuild(u->rchi);
    u->depth = u->lchi->depth + 1;
    if (u->depth & 1)
      u->mn = u->lchi->mn | u->rchi->mn;
    else
      u->mn = u->lchi->mn ^ u->rchi->mn;
  }
}
void segupdate(Node *u, int k, int v) {
  if (u->lo == u->hi) {
    u->mn = v;
  } else {
    int mi = u->lo + u->hi >> 1;
    if (k <= mi)
      segupdate(u->lchi, k, v);
    else
      segupdate(u->rchi, k, v);
    if (u->depth & 1)
      u->mn = u->lchi->mn | u->rchi->mn;
    else
      u->mn = u->lchi->mn ^ u->rchi->mn;
  }
}
int solve() {
  int nn;
  cin >> nn >> m;
  n = 1 << nn;
  for (int i = 0; i < n; i++) cin >> a[i];
  Node *tr = new Node(0, n - 1);
  segbuild(tr);
  for (int i = 0; i < m; i++) {
    int x, v;
    cin >> x >> v, x--;
    segupdate(tr, x, v);
    cout << tr->mn << endl;
  }
  return 0;
}
int main() {
  ios::sync_with_stdio(0);
  solve();
  return 0;
}
