#include <bits/stdc++.h>
using namespace std;
void update(set<pair<int, int> > arr[], const int& p, const int& v,
            long long& sum) {
  pair<int, int> tempPair = make_pair(p, p);
  long long twoPower = 1;
  for (int i = 0; i < 20; ++i, twoPower *= 2) {
    set<pair<int, int> >::iterator it[2], targetIt = arr[i].end();
    it[0] = arr[i].lower_bound(tempPair), it[1] = arr[i].upper_bound(tempPair);
    if (it[1] != arr[i].begin()) --it[1];
    for (int j = 0; j < 2; ++j)
      if (it[j] != arr[i].end() && p >= it[j]->first && p <= it[j]->second)
        targetIt = it[j];
    if (v & (1 << i)) {
      if (targetIt == arr[i].end()) {
        sum += twoPower;
        auto itInserted = arr[i].insert(tempPair).first;
        for (int j = 0; j < 2 && itInserted != arr[i].end();
             ++j, ++itInserted) {
          if (itInserted == arr[i].begin()) continue;
          auto tempIt = itInserted;
          --tempIt;
          if (itInserted->first - tempIt->second == 1) {
            long long n = itInserted->second - itInserted->first + 1;
            sum -= twoPower * n * (n + 1) / 2;
            n = tempIt->second - tempIt->first + 1;
            sum -= twoPower * n * (n + 1) / 2;
            auto tempIt2 =
                arr[i]
                    .insert(make_pair(tempIt->first, itInserted->second))
                    .first;
            arr[i].erase(tempIt), arr[i].erase(itInserted);
            itInserted = tempIt2;
            n = itInserted->second - itInserted->first + 1;
            sum += twoPower * n * (n + 1) / 2;
          }
        }
      }
    } else {
      if (targetIt == arr[i].end()) continue;
      long long n = targetIt->second - targetIt->first + 1;
      sum -= twoPower * n * (n + 1) / 2;
      int begin1 = targetIt->first, end1 = p - 1;
      int begin2 = p + 1, end2 = targetIt->second;
      n = end1 - begin1 + 1, sum += twoPower * n * (n + 1) / 2;
      n = end2 - begin2 + 1, sum += twoPower * n * (n + 1) / 2;
      arr[i].erase(targetIt);
      if (begin1 <= end1) arr[i].insert(make_pair(begin1, end1));
      if (begin2 <= end2) arr[i].insert(make_pair(begin2, end2));
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  set<pair<int, int> > arr[20];
  int tempArr[100001];
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; ++i) cin >> tempArr[i];
  tempArr[n++] = 0;
  long long sum = 0;
  long long twoPower = 1;
  for (int i = 0; i < 20; ++i, twoPower *= 2) {
    int lastJ = 0;
    while (lastJ < n) {
      if ((tempArr[lastJ] & (1 << i)) == 0) {
        ++lastJ;
        continue;
      }
      int tempJ = lastJ;
      while (((tempArr[tempJ] & (1 << i)) != 0)) ++tempJ;
      arr[i].insert(make_pair(lastJ, tempJ - 1));
      long long nCtr = tempJ - lastJ;
      sum += twoPower * nCtr * (nCtr + 1) / 2;
      lastJ = tempJ;
    }
  }
  int p, v;
  for (int i = 0; i < m; ++i) {
    cin >> p >> v;
    --p;
    update(arr, p, v, sum);
    cout << sum << "\n";
  }
  return 0;
}
