#include <bits/stdc++.h>
#pragma GCC optimize(1)
#pragma G++ optimize(1)
#pragma GCC optimize(2)
#pragma G++ optimize(2)
#pragma GCC optimize(3)
#pragma G++ optimize(3)
#pragma GCC optimize(4)
#pragma G++ optimize(4)
#pragma GCC optimize(5)
#pragma G++ optimize(5)
#pragma GCC optimize(6)
#pragma G++ optimize(6)
#pragma GCC optimize(7)
#pragma G++ optimize(7)
#pragma GCC optimize(8)
#pragma G++ optimize(8)
#pragma GCC optimize(9)
#pragma G++ optimize(9)
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
using namespace std;
const int INF = 1 << 30;
const int N = 200111;
struct node {
  int i, j;
  long long mn, ad = 0;
  node *l, *r;
  node(long long *a, int i, int j) : i(i), j(j) {
    if (j - i == 1) {
      l = r = NULL;
      mn = a[i];
    } else {
      int k = i + j >> 1;
      l = new node(a, i, k);
      r = new node(a, k, j);
      combine();
    }
  }
  inline void combine() { mn = min(l->mn, r->mn); }
  inline void visit() {
    if (ad) {
      mn += ad;
      if (l) l->ad += ad, r->ad += ad;
      ad = 0;
    }
  }
  inline void inc(int I, int J, long long a) {
    if (I <= i && j <= J) {
      ad += a;
      visit();
    } else {
      visit();
      if (!(J <= i || j <= I)) {
        l->inc(I, J, a);
        r->inc(I, J, a);
        combine();
      }
    }
  }
  inline int find() {
    visit();
    if (mn > 0) return INF;
    if (!l) {
      return mn == 0 ? i : INF;
    } else {
      int ans = INF;
      if (ans >= INF) ans = l->find();
      if (ans >= INF) ans = r->find();
      return ans;
    }
  }
};
long long a[N], s[N];
inline void rd(long long &val) {
  long long x = 0;
  int f = 1;
  char ch = getchar();
  while ((ch < '0' or ch > '9') and ch != '-') ch = getchar();
  if (ch == '-') {
    f = -1;
    ch = getchar();
  }
  while (ch >= '0' and ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  val = x * f;
}
inline void rd(int &val) {
  int x = 0;
  int f = 1;
  char ch = getchar();
  while ((ch < '0' or ch > '9') and ch != '-') ch = getchar();
  if (ch == '-') {
    f = -1;
    ch = getchar();
  }
  while (ch >= '0' and ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  val = x * f;
}
inline void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
inline void print(int x) {
  write(x);
  putchar('\n');
}
int main() {
  int n, q;
  rd(n), rd(q);
  for (int i = 0; i < n; i++) {
    rd(a[i]);
    s[i + 1] = s[i] + a[i];
  }
  for (int i = 0; i < n; i++) {
    s[i] -= a[i];
  }
  node *t = new node(s, 0, n);
  while (q--) {
    int i;
    long long v;
    rd(i), rd(v);
    long long d = v - a[--i];
    t->inc(i, i + 1, -d);
    t->inc(i + 1, n, +d);
    t->visit();
    a[i] += d;
    int ans = t->find();
    printf("%d\n", ans >= INF ? -1 : ans + 1);
  }
}
