#include <bits/stdc++.h>
using namespace std;
long long a[200000 + 5], s[200000 + 5];
struct node {
  long long mx[31], mk;
  int id[31];
} t[524288];
inline void up(int k) {
  int i, a = 0, b = 0;
  for (i = 0; i < 31; ++i)
    if (t[(k << 1)].mx[a] > t[(k << 1 | 1)].mx[b])
      t[k].mx[i] = t[(k << 1)].mx[a], t[k].id[i] = t[(k << 1)].id[a++];
    else
      t[k].mx[i] = t[(k << 1 | 1)].mx[b], t[k].id[i] = t[(k << 1 | 1)].id[b++];
}
void build(int k, int l, int r) {
  if (l == r) {
    t[k].mx[0] = s[l];
    t[k].id[0] = l;
    for (int i = 1; i < 31; ++i) t[k].mx[i] = -1e18;
    return;
  }
  int mid = l + r >> 1;
  build((k << 1), l, mid);
  build((k << 1 | 1), mid + 1, r);
  up(k);
}
void add(int k, long long x) {
  for (int i = 0; i < 31; ++i) t[k].mx[i] += x;
  t[k].mk += x;
}
inline void down(int k) {
  if (t[k].mx) add((k << 1), t[k].mk), add((k << 1 | 1), t[k].mk), t[k].mk = 0;
}
void add(int k, int l, int r, int ql, int qr, int x) {
  if (l == ql && r == qr) {
    add(k, x);
    return;
  }
  int mid = l + r >> 1;
  down(k);
  if (qr <= mid)
    add((k << 1), l, mid, ql, qr, x);
  else if (ql > mid)
    add((k << 1 | 1), mid + 1, r, ql, qr, x);
  else
    add((k << 1), l, mid, ql, mid, x),
        add((k << 1 | 1), mid + 1, r, mid + 1, qr, x);
  up(k);
}
int main() {
  int n, q, i, x, y;
  scanf("%d%d", &n, &q);
  for (i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
    s[i] = s[i - 1] + a[i];
  }
  for (i = n; i; --i) s[i] = a[i] - s[i - 1];
  build(1, 1, n);
  while (q--) {
    scanf("%d%d", &x, &y);
    add(1, 1, n, x, x, y - a[x]);
    if (x < n) add(1, 1, n, x + 1, n, a[x] - y);
    a[x] = y;
    for (i = 0; i < 31; ++i)
      if (t[1].mx[i] == 0) break;
    printf("%d\n", i < 31 ? t[1].id[i] : -1);
  }
}
