#include using namespace std; using T = long long; struct FenwickTree { // queries are right-exclusive; 0-based int n; vector tree; FenwickTree(int n) : n(n) { tree.assign(n + 1, 0); } T query(int l, int r) { return query(r) - query(l); } // [l,r) T query(int r) { // [0,r) T s = 0; for(; r > 0; r -= (r & (-r))) s += tree[r]; return s; } void update(int i, T v) { for(++i; i <= n; i += (i & (-i))) tree[i] += v; } }; int main() { int n, q; cin >> n >> q; vector a(n); FenwickTree f(n); T sum = 0; for(int i = 0; i < n; ++i) { cin >> a[i]; sum += a[i]; f.update(i, a[i]); } while(q--) { int i; T x; cin >> i >> x; f.update(i, x - a[i]); sum += x - a[i]; a[i] = x; int l = 0, h = n - 1; // m in [l,h] pair best = {std::numeric_limits::max(), -1}; while(l <= h) { int m = (l + h + 1) / 2; T ls = f.query(m); // [0,m) T rs = sum - ls - a[m]; pair p{abs(ls - rs), m}; best = min(best, p); if(l == h) break; if(ls < rs) l = m + 1; if(ls >= rs) h = m - 1; } cout << best.second << '\n'; } return 0; }