#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
long long n, q, pos, val;
long long prefix[200005], a[200005];
long long st[900005], lazy[900005];
void update(long id, long l, long r, long i, long j, long long x) {
  if (lazy[id] != 0) {
    st[id] += lazy[id];
    if (l < r) {
      lazy[2 * id] += lazy[id];
      lazy[2 * id + 1] += lazy[id];
    }
    lazy[id] = 0;
  }
  if (l > j || r < i || i > j) {
    return;
  }
  if (l >= i && r <= j) {
    st[id] = st[id] + x;
    if (l < r) {
      lazy[2 * id] = lazy[2 * id] + x;
      lazy[2 * id + 1] = lazy[2 * id + 1] + x;
    }
    return;
  }
  long mid = (l + r) / 2;
  update(2 * id, l, mid, i, j, x);
  update(2 * id + 1, mid + 1, r, i, j, x);
  st[id] = max(st[2 * id], st[2 * id + 1]);
}
long long get_max(long id, long l, long r, long i, long j) {
  if (lazy[id] != 0) {
    st[id] += lazy[id];
    if (l < r) {
      lazy[2 * id] += lazy[id];
      lazy[2 * id + 1] += lazy[id];
    }
    lazy[id] = 0;
  }
  if (l > j || r < i || l > r) {
    return -1e18;
  }
  if (l >= i && r <= j) {
    return st[id];
  }
  long mid = (l + r) / 2;
  return max(get_max(2 * id, l, mid, i, j),
             get_max(2 * id + 1, mid + 1, r, i, j));
}
long get(long id, long l, long r, long i, long j) {
  if (lazy[id] != 0) {
    st[id] += lazy[id];
    if (l < r) {
      lazy[2 * id] += lazy[id];
      lazy[2 * id + 1] += lazy[id];
    }
    lazy[id] = 0;
  }
  if (l > j || r < i || l > r) {
    return n + 1;
  }
  if (l >= i && r <= j) {
    if (l == r) {
      if (st[id] >= 0) {
        return l;
      } else {
        return n + 1;
      }
    } else {
      long mid = (l + r) / 2;
      if (st[2 * id] + lazy[2 * id] >= 0) {
        return get(2 * id, l, mid, i, j);
      } else {
        if (st[2 * id + 1] + lazy[2 * id + 1] >= 0) {
          return get(2 * id + 1, mid + 1, r, i, j);
        } else {
          return n + 1;
        }
      }
    }
  }
  long mid = (l + r) / 2;
  return min(get(2 * id, l, mid, i, j), get(2 * id + 1, mid + 1, r, i, j));
}
int main() {
  scanf("%lld %lld", &n, &q);
  long shaman = -1;
  for (int i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
    prefix[i] = prefix[i - 1] + a[i];
    update(1, 1, n, i, i, 2 * a[i] - prefix[i]);
    if (2 * a[i] - prefix[i] == 0 && shaman == -1) {
      shaman = i;
    }
  }
  for (int vl = 1; vl <= q; vl++) {
    scanf("%lld %lld", &pos, &val);
    update(1, 1, n, pos, pos, val - a[pos]);
    update(1, 1, n, pos + 1, n, a[pos] - val);
    a[pos] = val;
    if (shaman >= 1 && shaman < pos) {
      printf("%ld\n", shaman);
    } else {
      shaman = -1;
      long cur = pos;
      while (cur <= n) {
        long dm = get(1, 1, n, cur, n);
        if (dm == n + 1) {
          break;
        } else {
          if (get_max(1, 1, n, dm, dm) == 0) {
            shaman = dm;
            break;
          } else {
            cur = dm + 1;
          }
        }
      }
      printf("%ld\n", shaman);
    }
  }
}
