#include <bits/stdc++.h>
using namespace std;
static inline void canhazfast() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
}
template <typename T>
T gcd(T a, T b) {
  return b == 0 ? a : gcd(b, a % b);
}
template <typename T>
T extgcd(T a, T b, T &x, T &y) {
  T x0 = 1, y0 = 0, x1 = 0, y1 = 1;
  while (b) {
    T q = a / b;
    a %= b;
    swap(a, b);
    x0 -= q * x1;
    swap(x0, x1);
    y0 -= q * y1;
    swap(y0, y1);
  }
  x = x0;
  y = y0;
  return a;
}
static inline int ctz(unsigned x) { return __builtin_ctz(x); }
static inline int ctzll(unsigned long long x) { return __builtin_ctzll(x); }
static inline int clz(unsigned x) { return __builtin_clz(x); }
static inline int clzll(unsigned long long x) { return __builtin_clzll(x); }
static inline int popcnt(unsigned x) { return __builtin_popcount(x); }
static inline int popcntll(unsigned long long x) {
  return __builtin_popcountll(x);
}
static inline int bsr(unsigned x) { return 31 ^ clz(x); }
static inline int bsrll(unsigned long long x) { return 63 ^ clzll(x); }
struct Node {
  long long mx, lz;
};
Node t[600016];
int a[200016];
long long build(int u, int b, int e, long long s = 0) {
  if (b + 1 == e) {
    t[u].mx = a[b] - s;
    return s + a[b];
  }
  int m = (b + e + 1) / 2, lc = 2 * u, rc = 2 * u + 1;
  s = build(lc, b, m, s);
  s = build(rc, m, e, s);
  t[u].mx = max(t[lc].mx, t[rc].mx);
  return s;
}
void push(int u, int sz) {
  t[u].mx += t[u].lz;
  if (sz > 1) {
    t[2 * u].lz += t[u].lz;
    t[2 * u + 1].lz += t[u].lz;
  }
  t[u].lz = 0;
}
void upd(int u, int b, int e, int pos, int d) {
  push(u, e - b);
  if (pos >= e) return;
  if (pos < b) return t[u].lz -= d, push(u, e - b);
  if (e - b == 1) return t[u].lz += d, push(u, e - b);
  int m = (b + e + 1) / 2, lc = 2 * u, rc = 2 * u + 1;
  upd(lc, b, m, pos, d);
  upd(rc, m, e, pos, d);
  t[u].mx = max(t[lc].mx, t[rc].mx);
}
int get(int u, int b, int e) {
  push(u, e - b);
  if (t[u].mx < 0) return -2;
  if (b + 1 == e) return t[u].mx == 0 ? b : -2;
  int m = (b + e + 1) / 2, lc = 2 * u, rc = 2 * u + 1;
  int res = get(lc, b, m);
  if (res < 0) res = get(rc, m, e);
  return res;
}
int main() {
  canhazfast();
  int n, q;
  cin >> n >> q;
  for (int i = 0; i < n; ++i) cin >> a[i];
  build(1, 0, n);
  for (; q; --q) {
    int p, x, d;
    cin >> p >> x;
    --p;
    d = x - a[p];
    upd(1, 0, n, p, d);
    a[p] = x;
    cout << get(1, 0, n) + 1 << '\n';
  }
  return 0;
}
