#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long INF64 = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 10;
const long long MAXV = 1e9 + 10;
int n, q, mx[maxn * 4], a[maxn];
long long sum[maxn * 4];
inline long long MAX(long long x, long long y) { return x < y ? y : x; }
void pushUp(int rt) {
  mx[rt] = MAX(mx[(((rt) << 1) | 1)], mx[(((rt) << 1) + 2)]);
  sum[rt] = sum[(((rt) << 1) | 1)] + sum[(((rt) << 1) + 2)];
}
void build(int rt = 0, int l = 0, int r = n) {
  if (l == r - 1) {
    mx[rt] = sum[rt] = a[l];
    return;
  }
  build((((rt) << 1) | 1), l, (((l) + (r)) / 2));
  build((((rt) << 1) + 2), (((l) + (r)) / 2), r);
  pushUp(rt);
}
void update(int x, int y, int rt = 0, int l = 0, int r = n) {
  if (l > x || r <= x) return;
  if (l == x && r == l + 1) {
    mx[rt] = sum[rt] = y;
    return;
  }
  update(x, y, (((rt) << 1) | 1), l, (((l) + (r)) / 2));
  update(x, y, (((rt) << 1) + 2), (((l) + (r)) / 2), r);
  pushUp(rt);
}
int qmax(int x, int y, int rt = 0, int l = 0, int r = n) {
  if (x >= y) return -1;
  if (l >= y || r <= x) return -1;
  if (l >= x && r <= y) return mx[rt];
  int a = qmax(x, y, (((rt) << 1) | 1), l, (((l) + (r)) / 2)),
      b = qmax(x, y, (((rt) << 1) + 2), (((l) + (r)) / 2), r);
  return MAX(a, b);
}
int get(int p, long long v, int rt = 0, int l = 0, int r = n) {
  if (r <= p + 1 || mx[rt] < v) return -1;
  if (l == r - 1) {
    if (mx[rt] >= v) return l;
    return -1;
  }
  int a = get(p, v, (((rt) << 1) | 1), l, (((l) + (r)) / 2));
  if (a >= 0) return a;
  return get(p, v, (((rt) << 1) + 2), (((l) + (r)) / 2), r);
}
long long qsum(int x, int y, int rt = 0, int l = 0, int r = n) {
  if (x >= y) return 0;
  if (l >= y || r <= x) return 0;
  if (l >= x && r <= y) return sum[rt];
  long long a = qsum(x, y, (((rt) << 1) | 1), l, (((l) + (r)) / 2)),
            b = qsum(x, y, (((rt) << 1) + 2), (((l) + (r)) / 2), r);
  return a + b;
}
int solve() {
  int pos = -1;
  while (1) {
    long long now = qsum(0, pos + 1);
    if (now >= MAXV || pos == n - 1) return -1;
    int r = get(pos, now);
    if (r < 0) return -1;
    if (a[r] == qsum(0, r)) return r + 1;
    pos = r;
  }
  return -1;
}
int main() {
  scanf("%d", &n);
  scanf("%d", &q);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  build();
  while (q--) {
    int x, y;
    scanf("%d", &x);
    scanf("%d", &y);
    update(x - 1, y);
    a[x - 1] = y;
    printf("%d\n", solve());
  }
  return 0;
}
