#include <bits/stdc++.h>
using namespace ::std;
const long long maxn = 1e5 + 500;
const long long mod = 1e9 + 7;
const long long inf = 1e9 + 500;
set<long long> sar[17];
set<long long>::iterator sarg;
set<long long>::iterator sarb;
set<long long>::iterator tahg;
set<long long>::iterator tahb;
set<long long> tah[17];
long long a[maxn];
long long ans = 0;
long long nn;
long long mos(long long a) { return a * (a + 1) / 2; }
void update(long long p, long long v) {
  for (long long i = 0; i < 17; i++) {
    long long z = (1 << i);
    bool bit = ((v >> i) & 1);
    if ((((a[p]) >> i) & 1) == bit) {
      continue;
    }
    if (!bit) {
      sarg = sar[i].upper_bound(p);
      sarg--;
      long long s = (*sarg);
      long long t = (*(tah[i].lower_bound(p)));
      ans -= mos(t - s + 1) * z;
      ans += mos(t - p) * z;
      ans += mos(p - s) * z;
      if (s != p) {
        tah[i].insert(p - 1);
      } else {
        sar[i].erase(p);
      }
      if (t != p) {
        sar[i].insert(p + 1);
      } else {
        tah[i].erase(p);
      }
    } else {
      if ((((a[p - 1]) >> i) & 1) && (((a[p + 1]) >> i) & 1)) {
        tah[i].erase(p - 1);
        sar[i].erase(p + 1);
        sarg = sar[i].lower_bound(p);
        sarg--;
        long long sarr = (*sarg);
        long long tahh = (*((tah[i].lower_bound(p))));
        ans -= mos(tahh - p) * z;
        ans -= mos(p - sarr) * z;
        ans += mos(tahh - sarr + 1) * z;
      }
      if ((((a[p - 1]) >> i) & 1) == 0 && (((a[p + 1]) >> i) & 1)) {
        sar[i].erase(p + 1);
        sar[i].insert(p);
        long long tahh = (*((tah[i].lower_bound(p))));
        ans -= mos(tahh - p) * z;
        ans += mos(tahh - p + 1) * z;
      }
      if ((((a[p - 1]) >> i) & 1) && (((a[p + 1]) >> i) & 1) == 0) {
        tah[i].erase(p - 1);
        tah[i].insert(p);
        sarg = sar[i].lower_bound(p);
        sarg--;
        long long sarr = (*sarg);
        ans -= mos(p - sarr) * z;
        ans += mos(p - sarr + 1) * z;
      }
      if ((((a[p - 1]) >> i) & 1) == 0 && (((a[p + 1]) >> i) & 1) == 0) {
        ans += z;
        tah[i].insert(p);
        sar[i].insert(p);
      }
    }
  }
  a[p] = v;
}
int main() {
  long long n, m;
  cin >> n >> m;
  nn = n;
  if (n == 1) {
    long long v;
    cin >> v;
    for (long long i = 0; i < m; i++) {
      cin >> v >> v;
      cout << v << endl;
    }
    return 0;
  }
  for (long long i = 1; i <= n; i++) {
    long long v;
    cin >> v;
    update(i, v);
  }
  while (m--) {
    long long p, v;
    cin >> p >> v;
    update(p, v);
    cout << ans << endl;
  }
}
