#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
const int N = 200005;
const long long oo = 6e18;
int ff = 0;
class Segtree {
  int n;
  vector<long long> st;
  void update(int p, int L, int R, int i, long long val) {
    if (i > R || i < L) return;
    if (L >= i && R <= i) {
      st[p] = val;
      return;
    }
    int mid = (L + R) / 2;
    update(2 * p, L, mid, i, val);
    update(2 * p + 1, mid + 1, R, i, val);
    st[p] = max(st[2 * p], st[2 * p + 1]);
  }
  int query(int p, int L, int R, int i, long long val) {
    if (i >= R || st[p] < val) return n + 1;
    if (L == R) return L;
    int mid = (L + R) / 2;
    int ret = query(2 * p, L, mid, i, val);
    if (ret != n + 1) return ret;
    return query(2 * p + 1, mid + 1, R, i, val);
  }

 public:
  Segtree(int sz) : n(sz), st(4 * sz) {}
  int query(int i, long long val) { return query(1, 1, n, i, val); }
  void update(int i, long long val) { update(1, 1, n, i, val); }
};
long long v[N];
long long p[N];
long long ft[N];
void add(int x, long long val) {
  for (; x < N; x += x & -x) ft[x] += val;
}
long long sum(long long x) {
  long long ans = 0;
  for (; x; x -= x & -x) ans += ft[x];
  return ans;
}
int main() {
  int n, q;
  scanf("%d %d", &n, &q);
  Segtree st(n);
  for (int i = 1; i <= n; i++) {
    scanf("%lld", v + i);
    add(i, v[i]);
    st.update(i, v[i]);
  }
  int a, b;
  while (q--) {
    scanf("%d %d", &a, &b);
    st.update(a, b);
    add(a, b - v[a]);
    v[a] = b;
    int ans = -1;
    for (int i = 1; i <= n && ans == -1;) {
      if (v[i] == sum(i - 1)) ans = i;
      i = st.query(i, sum(i));
    }
    printf("%d\n", ans);
  }
}
