#include <bits/stdc++.h>
using namespace std;
int seg[400010];
void update(int no, int ini, int fim, int pos, int val, bool op) {
  if (ini == fim) {
    seg[no] = val;
    return;
  }
  int meio = (ini + fim) / 2;
  if (pos <= meio)
    update(2 * no, ini, meio, pos, val, !op);
  else
    update(2 * no + 1, meio + 1, fim, pos, val, !op);
  seg[no] = op ? seg[2 * no] | seg[2 * no + 1] : seg[2 * no] ^ seg[2 * no + 1];
}
int query(int no, int ini, int fim, int esq, int dir, bool op) {
  if (esq > fim || dir < ini) return 0;
  if (ini >= esq && fim <= dir) return seg[no];
  int meio = (ini + fim) / 2, q1, q2;
  q1 = query(2 * no, ini, meio, esq, dir, !op),
  q2 = query(2 * no + 1, meio + 1, fim, esq, dir, !op);
  return op ? q1 | q2 : q1 ^ q2;
}
int main() {
  int n, x, m, y;
  cin >> n >> m;
  for (int i = int(1); i <= int((1 << n)); i++)
    cin >> x, update(1, 1, 1 << n, i, x, n & 1);
  while (m--) {
    cin >> x >> y;
    update(1, 1, 1 << n, x, y, n & 1);
    cout << query(1, 1, 1 << n, 1, 1 << n, n & 1) << endl;
  }
  return 0;
}
