#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
enum { MOD0 = 1000000000, MOD7 = 1000000007, MOD9 = 1000000009 };
template <typename T>
class FenwickTree {
  vector<T> tree;

 public:
  FenwickTree<T>() : tree() {}
  FenwickTree<T>(vector<T> a) : tree(a.size() + 1, 0) {
    for (size_t i = 0; i < a.size(); ++i) {
      add(i, a[i]);
    }
  }
  size_t size() const { return tree.size() ? tree.size() - 1 : 0; }
  void add(size_t index, T value) {
    for (; ++index <= size(); index |= index - 1) {
      tree[index] += value;
    }
  }
  T sum(size_t right) {
    T ret{};
    for (; right; right &= right - 1) {
      ret += tree[right];
    }
    return ret;
  }
  T sum(size_t left, size_t right) { return sum(right) - sum(left); }
};
int a[200000];
FenwickTree<long long> ft;
int t[800000];
int n;
void build(int x = 0, int L = 0, int R = n - 1) {
  if (L == R) {
    t[x] = a[L];
    return;
  }
  int M = (L + R) / 2;
  build(2 * x + 1, L, M);
  build(2 * x + 2, M + 1, R);
  t[x] = max(t[2 * x + 1], t[2 * x + 2]);
}
void upd(int index, int val, int x = 0, int L = 0, int R = n - 1) {
  if (L == R) {
    t[x] = val;
    return;
  }
  int M = (L + R) / 2;
  if (index <= M) {
    upd(index, val, 2 * x + 1, L, M);
  } else {
    upd(index, val, 2 * x + 2, M + 1, R);
  }
  t[x] = max(t[2 * x + 1], t[2 * x + 2]);
}
int get(long long val, int from, int x = 0, int L = 0, int R = n - 1) {
  if (t[x] < val || R < from) {
    return n;
  } else if (L == R) {
    return L;
  }
  int M = (L + R) / 2;
  if (M < from) {
    return get(val, from, 2 * x + 2, M + 1, R);
  } else if (t[2 * x + 1] >= val) {
    int s = get(val, from, 2 * x + 1, L, M);
    if (s < n) {
      return s;
    }
  }
  return get(val, from, 2 * x + 2, M + 1, R);
}
int get_ans() {
  long long cur = 0;
  int index = 0;
  if (a[0] == 0) {
    return 1;
  }
  while (index < n) {
    cur += a[index];
    index = get(cur, index + 1);
    cur = ft.sum(index);
    if (a[index] == cur) {
      break;
    }
  }
  return index >= n ? -1 : index + 1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  int q;
  cin >> n >> q;
  vector<long long> b;
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
    b.push_back(a[i]);
  }
  ft = FenwickTree<long long>(b);
  build();
  while (q--) {
    int p, x;
    cin >> p >> x;
    --p;
    ft.add(p, x - a[p]);
    a[p] = x;
    upd(p, x);
    cout << get_ans() << '\n';
  }
  return 0;
}
