#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MOD2 = 1e9 + 9;
const int HP = 727;
const int INF = INT_MAX;
const long long LINF = LLONG_MAX;
#pragma optimize O3
const int N = 2e5 + 2;
long long a[N], seg[4 * N], lazy[4 * N], n, q;
void upd(long long i, long long v) {
  seg[i] += v;
  lazy[i] += v;
}
void shift(long long i) {
  upd(2 * i, lazy[i]);
  upd(2 * i + 1, lazy[i]);
  lazy[i] = 0;
}
void update(long long x, long long y, long long v, long long i = 1,
            long long l = 1, long long r = n + 1) {
  if (x >= r || y <= l) return;
  if (x <= l && y >= r) {
    upd(i, v);
    return;
  }
  shift(i);
  long long mid = (l + r) / 2;
  update(x, y, v, 2 * i, l, mid);
  update(x, y, v, 2 * i + 1, mid, r);
  seg[i] = max(seg[2 * i], seg[2 * i + 1]);
}
long long get(long long i = 1, long long l = 1, long long r = n + 1) {
  if (seg[i] < 0) return -1;
  if (r - l < 2) return (seg[i] == 0 ? l : -1);
  shift(i);
  long long mid = (l + r) / 2;
  long long res1 = get(2 * i, l, mid);
  if (res1 != -1)
    return res1;
  else
    return get(2 * i + 1, mid, r);
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> q;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    update(i, i + 1, a[i]);
    update(i + 1, n + 1, -a[i]);
  }
  while (q--) {
    long long p, x;
    cin >> p >> x;
    long long tmp = x - a[p];
    a[p] = x;
    update(p, p + 1, tmp);
    update(p + 1, n + 1, -tmp);
    cout << get() << endl;
  }
}
