#include <bits/stdc++.h>
using namespace std;
const int B = 20;
const int N = 1e5 + 7;
int n, m, a[N];
struct ND {
  int l0, r0;
  ND() {}
  ND(int l0, int r0) : l0(l0), r0(r0) {}
  void init(int p, int v) {
    l0 = v == 0 ? p : n + 1;
    r0 = v == 0 ? p : 0;
  }
  void merge(const ND &a, const ND &b) {
    l0 = min(a.l0, b.l0);
    r0 = max(a.r0, b.r0);
  }
};
struct Tree {
  static const int N = ::N << 2;
  ND nd[N];
  void chg(int o, int l, int r, int qx, int qv) {
    if (l == r) {
      nd[o].init(qx, qv);
      return;
    }
    int mid = l + r >> 1;
    if (qx <= mid)
      chg(o << 1, l, mid, qx, qv);
    else
      chg(o << 1 | 1, mid + 1, r, qx, qv);
    nd[o].merge(nd[o << 1], nd[o << 1 | 1]);
  }
  ND qry(int o, int l, int r, int ql, int qr) {
    if (ql <= l && qr >= r) return nd[o];
    int mid = l + r >> 1;
    ND qryl(n + 1, 0);
    if (ql <= mid) qryl = qry(o << 1, l, mid, ql, qr);
    ND qryr(n + 1, 0);
    if (qr > mid) qryr = qry(o << 1 | 1, mid + 1, r, ql, qr);
    ND ret;
    ret.merge(qryl, qryr);
    return ret;
  }
} tree[B];
long long dc(int len) { return 1ll * (len + 1) * len / 2; }
long long getv(int p, int vv) {
  long long ret = 0;
  for (int b = (0); b < (B); ++b) {
    int v = vv >> b & 1;
    int lenl = p - 1 - (p > 1 ? tree[b].qry(1, 1, n, 1, p - 1).r0 : 0);
    int lenr = (p < n ? tree[b].qry(1, 1, n, p + 1, n).l0 : n + 1) - p - 1;
    long long tmp = v == 0 ? dc(lenl) + dc(lenr) : dc(lenl + lenr + 1);
    ret += tmp * (1 << b);
  }
  return ret;
}
void solve() {
  for (int i = (1); i < (n + 1); ++i) scanf("%d", &a[i]);
  for (int i = (1); i < (n + 1); ++i)
    for (int b = (0); b < (B); ++b) tree[b].chg(1, 1, n, i, a[i] >> b & 1);
  long long ans = 0;
  for (int b = (0); b < (B); ++b) {
    int tmp = 0;
    for (int i = (1); i < (n + 2); ++i)
      if (a[i] >> b & 1)
        tmp++;
      else {
        ans += dc(tmp) * (1 << b);
        tmp = 0;
      }
  }
  while (m--) {
    int p, v;
    scanf("%d%d", &p, &v);
    ans += -getv(p, a[p]) + getv(p, v);
    a[p] = v;
    for (int b = (0); b < (B); ++b) tree[b].chg(1, 1, n, p, a[p] >> b & 1);
    printf("%lld\n", ans);
  }
}
int main() {
  while (~scanf("%d%d", &n, &m)) solve();
  return 0;
}
