#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1.0);
const int N = 2e5 + 5;
int n, q, a[N];
struct Sum {
  long long *seg;
  int a, b;
  Sum() { seg = new long long[4 * N + 1]; }
  void build(int r, int i, int j) {
    if (i == j) {
      seg[r] = ::a[i];
    } else {
      int mid = (i + j) >> 1;
      build(2 * r, i, mid);
      build(2 * r + 1, mid + 1, j);
      seg[r] = seg[2 * r] + seg[2 * r + 1];
    }
  }
  long long query(int r, int i, int j, int val) {
    if (j < a or i > b) return 0;
    if (i >= a and j <= b) {
      if (val != INF) seg[r] = val;
      return seg[r];
    } else {
      int mid = (i + j) >> 1;
      long long L = query(2 * r, i, mid, val);
      long long R = query(2 * r + 1, mid + 1, j, val);
      seg[r] = seg[2 * r] + seg[2 * r + 1];
      return L + R;
    }
  }
  void update(int p, int val) {
    a = b = p;
    query(1, 0, n, val);
  }
  long long query(int l, int r) {
    a = l;
    b = r;
    return query(1, 0, n, INF);
  }
} segSum;
struct Max {
  int *seg, a, b;
  Max() { seg = new int[4 * N + 1]; }
  void build(int r, int i, int j) {
    if (i == j) {
      seg[r] = ::a[i];
    } else {
      int mid = (i + j) >> 1;
      build(2 * r, i, mid);
      build(2 * r + 1, mid + 1, j);
      seg[r] = max(seg[2 * r], seg[2 * r + 1]);
    }
  }
  void update(int r, int i, int j, int val) {
    if (j < a or i > a) return;
    if (i == j) {
      seg[r] = val;
    } else {
      int mid = (i + j) >> 1;
      update(2 * r, i, mid, val);
      update(2 * r + 1, mid + 1, j, val);
      seg[r] = max(seg[2 * r], seg[2 * r + 1]);
    }
  }
  void update(int p, int val) {
    a = p;
    update(1, 0, n, val);
  }
  int query(int r, int i, int j, long long val) {
    if (j < a or i > b) return INF;
    if (seg[r] < val) return INF;
    if (i == j) return i;
    int mid = (i + j) >> 1;
    if (i >= a and j <= b) {
      if (seg[2 * r] >= val) return query(2 * r, i, mid, val);
      return query(2 * r + 1, mid + 1, j, val);
    } else {
      return min(query(2 * r, i, mid, val), query(2 * r + 1, mid + 1, j, val));
    }
  }
  int query(int l, int r, long long val) {
    a = l;
    b = r;
    return query(1, 0, n, val);
  }
} segMax;
int main(void) {
  scanf("%d %d", &n, &q);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  segSum.build(1, 0, n);
  segMax.build(1, 0, n);
  while (q--) {
    int p, x;
    scanf("%d %d", &p, &x);
    segSum.update(p, x);
    segMax.update(p, x);
    a[p] = x;
    int i = 0;
    while (1) {
      long long val = segSum.query(0, i);
      int id = segMax.query(i + 1, n, val);
      if (id == INF) {
        printf("-1\n");
        break;
      }
      val = segSum.query(0, id - 1);
      if (val == a[id]) {
        printf("%d\n", id);
        break;
      }
      i = id;
    }
  }
  return 0;
}
