func_code_string: #include <bits/stdc++.h>   const int MAXN = 2e5 + 10;   using namespace std;   long long read() {     long long x = 0, f = 1;     char ch = getchar();     while (!isdigit(ch)) {       if (ch ==  - ) f = -1;       ch = getchar();     }     while (isdigit(ch)) x = x * 10 + ch -  0 , ch = getchar();     return f * x;   }   int n, q;   long long a[MAXN];   typedef struct node {     long long maxx;     long long sum;   } node;   node d[MAXN << 2];   void up(int x) {     d[x].sum = d[x << 1].sum + d[x << 1 | 1].sum;     d[x].maxx = max(d[x << 1].maxx, d[x << 1 | 1].maxx);   }   void built(int rt, int l, int r) {     if (l == r) {       d[rt].maxx = d[rt].sum = a[l];       return;     }     int mid = (l + r) >> 1;     built(rt << 1, l, mid);     built(rt << 1 | 1, mid + 1, r);     up(rt);   }   void update(int rt, int l, int r, int t, long long vul) {     if (l == r) {       d[rt].maxx = d[rt].sum = vul;       return;     }     int mid = (l + r) >> 1;     if (t <= mid)       update(rt << 1, l, mid, t, vul);     else       update(rt << 1 | 1, mid + 1, r, t, vul);     up(rt);   }   bool flag;   int pos1;   void querty2(int rt, int l, int r, long long vul) {     if (l == r) {       pos1 = l;       return;     }     int mid = (l + r) >> 1;     if (d[rt << 1].maxx >= vul)       querty2(rt << 1, l, mid, vul);     else       querty2(rt << 1 | 1, mid + 1, r, vul);   }   void querty(int rt, int l, int r, int ql, int qr, long long vul) {     if (flag) return;     if (ql <= l && r <= qr) {       if (d[rt].maxx >= vul) {         flag = 1;         querty2(rt, l, r, vul);       }       return;     }     int mid = (l + r) >> 1;     if (ql <= mid) querty(rt << 1, l, mid, ql, qr, vul);     if (qr > mid) querty(rt << 1 | 1, mid + 1, r, ql, qr, vul);   }   long long ans;   void querty1(int rt, int l, int r, int ql, int qr) {     if (ql <= l && r <= qr) {       ans += d[rt].sum;       return;     }     int mid = (l + r) >> 1;     if (ql <= mid) querty1(rt << 1, l, mid, ql, qr);     if (qr > mid) querty1(rt << 1 | 1, mid + 1, r, ql, qr);   }   int main() {     n = read();     q = read();     for (int i = 1; i <= n; i++) a[i] = read();     a[n + 1] = 1e18;     int pos, ans1;     long long vul, key, pre;     n++;     built(1, 1, n);     for (int i = 1; i <= q; i++) {       pos = read();       vul = read();       a[pos] = vul;       update(1, 1, n, pos, vul);       ans1 = -1;       key = 0;       if (!a[1]) {         printf( 1 n );         continue;       }       if (a[1] == a[2]) {         printf( 2 n );         continue;       }       key = a[1] + a[2];       pre = 3;       while (1) {         if (pre > n) break;         flag = 0;         querty(1, 1, n, pre, n, key);         ans = 0;         querty1(1, 1, n, 1, pos1 - 1);         if (ans == a[pos1]) {           ans1 = pos1;           break;         }         key = ans + a[pos1];         pre = pos1 + 1;       }       printf( %d n , ans1);     }     return 0;   }   