#include int max(int a, int b) { if (a > b) return a; else return b; } int seg[800005], ss; void update(int x, int v) { x += ss - 1; seg[x] = v; while (x > 0) { x = (x - 1) / 2; seg[x] = max(seg[2 * x + 1], seg[2 * x + 2]); } return; } int get_max(int l, int r) { int res = -1; l += ss - 1; r += ss - 1; for (; l <= r; l /= 2, r = r / 2 - 1) res = max(res, max(seg[l], seg[r])); return res; } int a[200005]; int main() { int n, q; scanf("%d %d", &n, &q); int i; for (i = 0; i < n; i++) scanf("%d", &a[i]); for (ss = 1; ss < n; ss *= 2); for (i = 0; i < 2 * ss - 1; i++) seg[i] = -1; for (i = 0; i < n; i++) update(i, a[i]); int c, x; int l, m, r; for (; q > 0; q--) { scanf("%d %d", &c, &x); if (get_max(0, n - 1) <= x) { printf("-1\n"); continue; } l = -1; r = n; if (c == 1) { while (r - l > 1) { m = (l + r) / 2; if (get_max(0, m) > x) r = m; else l = m; } printf("%d\n", r + 1); update(r, -1); } else { while (r - l > 1) { m = (l + r) / 2; if (get_max(m, n - 1) > x) l = m; else r = m; } printf("%d\n", l + 1); update(l, -1); } } return 0; }