#include <bits/stdc++.h>
using namespace std;
inline char gc() {
  static char buf[100000], *p1 = buf, *p2 = buf;
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
inline long long read() {
  long long x = 0;
  char ch = getchar();
  bool positive = 1;
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') positive = 0;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return positive ? x : -x;
}
inline void write(long long a) {
  if (a < 0) {
    a = -a;
    putchar('-');
  }
  if (a >= 10) write(a / 10);
  putchar('0' + a % 10);
}
inline void writeln(long long a) {
  write(a);
  puts("");
}
inline void wri(long long a) {
  write(a);
  putchar(' ');
}
long long n, q, a[200020], p, x;
long long tree[1000010];
long long from, to, cha, now;
void build(int x, int l, int r) {
  if (l > r) return;
  if (l == r) {
    tree[x] = a[l];
    return;
  }
  int mid = l + r >> 1;
  build(x << 1, l, mid);
  build(x << 1 | 1, mid + 1, r);
  tree[x] = (tree[x << 1] + tree[x << 1 | 1]);
}
void update(int x, int l, int r, int t, long long k) {
  if (l == r) {
    tree[x] = k;
    a[l] = k;
    return;
  }
  int mid = l + r >> 1;
  if (mid >= t) update(x << 1, l, mid, t, k);
  if (mid + 1 <= t) update(x << 1 | 1, mid + 1, r, t, k);
  tree[x] = (tree[x << 1] + tree[x << 1 | 1]);
}
void query(int x, int l, int r, long long t) {
  if (to != 0) return;
  if (l == r) {
    to = l;
    return;
  }
  int mid = l + r >> 1;
  if (t > tree[x << 1]) {
    query(x << 1 | 1, mid + 1, r, t - tree[x << 1]);
  } else
    query(x << 1, l, mid, t);
}
long long add(int x, int l, int r, int tl, int tr) {
  if (tr < tl) return 0;
  long long ans = 0;
  if (l >= tl && r <= tr) {
    return tree[x];
  }
  long long mid = l + r >> 1;
  if (tl <= mid) {
    ans += add(x << 1, l, mid, tl, tr);
  }
  if (tr >= mid + 1) {
    ans += add(x << 1 | 1, mid + 1, r, tl, tr);
  }
  return ans;
}
int main() {
  cin >> n >> q;
  for (int i = 1; i <= n; i++) {
    a[i] = read();
  }
  a[++n] = 0x3f3f3f3f3f3f3f3f;
  build(1, 1, n);
  while (q--) {
    p = read(), x = read();
    update(1, 1, n, p, x);
    from = 1, now = a[1];
    while (from < n) {
      to = 0;
      query(1, 1, n, now * 2);
      long long sum = add(1, 1, n, 1, to - 1);
      if (sum == a[to]) {
        writeln(to);
        from = -1;
        break;
      }
      from = to;
      now = sum + a[to];
    }
    if (from != -1) puts("-1");
  }
  return 0;
}
