func_code_string: #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;   }   