#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline bool chkmin(T &a, T b) {
  return b < a ? a = b, 1 : 0;
}
template <typename T>
inline bool chkmax(T &a, T b) {
  return b > a ? a = b, 1 : 0;
}
inline int read() {
  int x(0), sgn(1);
  char ch(getchar());
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') sgn = -1;
  for (; isdigit(ch); ch = getchar()) x = (x * 10) + (ch ^ 48);
  return x * sgn;
}
void File() {}
const int N = 2e5 + 1e3;
int a[N];
template <int Maxn>
struct Segment_Tree {
  int maxv[Maxn];
  long long sumv[Maxn];
  inline void Push_Up(int o) {
    sumv[o] = sumv[o << 1] + sumv[o << 1 | 1];
    maxv[o] = max(maxv[o << 1], maxv[o << 1 | 1]);
  }
  void Build(int o, int l, int r) {
    if (l == r) return (void)(maxv[o] = sumv[o] = a[l]);
    int mid = (l + r) >> 1;
    Build(o << 1, l, mid);
    Build(o << 1 | 1, mid + 1, r);
    Push_Up(o);
  }
  void Update(int o, int l, int r, int up, int uv) {
    if (l == r) return (void)(sumv[o] = maxv[o] = uv);
    int mid = (l + r) >> 1;
    if (up <= mid)
      Update(o << 1, l, mid, up, uv);
    else
      Update(o << 1 | 1, mid + 1, r, up, uv);
    Push_Up(o);
  }
  long long Sum(int o, int l, int r, int qr) {
    if (r <= qr) return sumv[o];
    int mid = (l + r) >> 1;
    return Sum(o << 1, l, mid, qr) +
           (qr > mid ? Sum(o << 1 | 1, mid + 1, r, qr) : 0);
  }
  int Find(int o, int l, int r, int ql, long long val) {
    if (ql > r || maxv[o] < val) return 0;
    if (l == r) return l;
    int mid = (l + r) >> 1;
    int pos = Find(o << 1, l, mid, ql, val);
    return pos ? pos : Find(o << 1 | 1, mid + 1, r, ql, val);
  }
};
Segment_Tree<N << 2> T;
int n, q;
inline int Solve() {
  if (a[1] == 0) return 1;
  int cur = 1;
  long long sum = a[1];
  for (;;) {
    int pos = T.Find(1, 1, n, cur + 1, sum);
    if (!pos) return -1;
    sum = T.Sum(1, 1, n, (cur = pos) - 1);
    if (sum == a[pos]) return pos;
    sum += a[pos];
  }
}
int main() {
  File();
  n = read(), q = read();
  for (register int i = (1), iend = (int)(n); i <= iend; ++i) a[i] = read();
  T.Build(1, 1, n);
  for (register int i = (1), iend = (int)(q); i <= iend; ++i) {
    int pos = read(), val = read();
    T.Update(1, 1, n, pos, a[pos] = val);
    printf("%d\n", Solve());
  }
  return 0;
}
