func_code_string: #include <bits/stdc++.h>   using namespace std;   static inline void canhazfast() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     cout.tie(nullptr);   }   template <typename T>   T gcd(T a, T b) {     return b == 0 ? a : gcd(b, a % b);   }   template <typename T>   T extgcd(T a, T b, T &x, T &y) {     T x0 = 1, y0 = 0, x1 = 0, y1 = 1;     while (b) {       T q = a / b;       a %= b;       swap(a, b);       x0 -= q * x1;       swap(x0, x1);       y0 -= q * y1;       swap(y0, y1);     }     x = x0;     y = y0;     return a;   }   static inline int ctz(unsigned x) { return __builtin_ctz(x); }   static inline int ctzll(unsigned long long x) { return __builtin_ctzll(x); }   static inline int clz(unsigned x) { return __builtin_clz(x); }   static inline int clzll(unsigned long long x) { return __builtin_clzll(x); }   static inline int popcnt(unsigned x) { return __builtin_popcount(x); }   static inline int popcntll(unsigned long long x) {     return __builtin_popcountll(x);   }   static inline int bsr(unsigned x) { return 31 ^ clz(x); }   static inline int bsrll(unsigned long long x) { return 63 ^ clzll(x); }   struct Node {     long long mx, lz;   };   Node t[1 << 19];   int a[1 << 18];   long long build(int u, int b, int e, long long s = 0) {     if (b + 1 == e) {       t[u].mx = a[b] - s;       return s + a[b];     }     int m = (b + e) / 2, lc = 2 * u, rc = 2 * u + 1;     s = build(lc, b, m, s);     s = build(rc, m, e, s);     t[u].mx = max(t[lc].mx, t[rc].mx);     return s;   }   void push(int u, int sz) {     if (!t[u].lz) return;     t[u].mx += t[u].lz;     if (sz > 1) {       t[2 * u].lz += t[u].lz;       t[2 * u + 1].lz += t[u].lz;     }     t[u].lz = 0;   }   void upd(int u, int b, int e, int pos, int d) {     int sz = e - b;     if (pos >= e) return push(u, e - b);     if (pos < b) return t[u].lz -= d, push(u, sz);     if (sz == 1) return t[u].lz += d, push(u, sz);     push(u, sz);     int m = (b + e) / 2, lc = 2 * u, rc = 2 * u + 1;     upd(lc, b, m, pos, d);     upd(rc, m, e, pos, d);     t[u].mx = max(t[lc].mx, t[rc].mx);   }   int get(int u, int b, int e) {     push(u, e - b);     if (t[u].mx < 0) return -2;     if (b + 1 == e) return t[u].mx == 0 ? b : -2;     int m = (b + e) / 2, lc = 2 * u, rc = 2 * u + 1;     int res = get(lc, b, m);     if (res < 0) res = get(rc, m, e);     return res;   }   int main() {     canhazfast();     int n, q;     cin >> n >> q;     for (int i = 0; i < n; ++i) cin >> a[i];     build(1, 0, n);     for (; q; --q) {       int p, x;       cin >> p >> x;       --p;       upd(1, 0, n, p, x - a[p]);       a[p] = x;       cout << get(1, 0, n) + 1 <<   n ;     }     return 0;   }   