#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 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; } pair search(T v) { // Return the last position with query(i) 0; p >>= 1) if(i + p < n && sum + tree[i + p] < v) i += p, sum += tree[i]; return {i, sum}; } }; 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; pair best = {std::numeric_limits::max(), -1}; const auto &p = f.search((sum + 1) / 2); const int &m = p.first; const T &v = p.second; if(m > 0) best = min(best, {abs(abs((v - a[m - 1]) - (sum - v))-a[m-1]%2), m - 1}); best = min(best, {abs(abs(v - (sum - v - a[m]))-a[m]%2), m}); if(m + 1 < n) best = min(best, {abs(abs((v + a[m]) - (sum - v - a[m] - a[m + 1]))-a[m+1]%2), m + 1}); cout << best.second << '\n'; } return 0; }