#include #include #include #include #include #include using namespace atcoder; using namespace std; using ll = long long; using ull = unsigned long long; template using max_heap = priority_queue; template using min_heap = priority_queue, greater<>>; ll ll_min = numeric_limits::min(); ll ll_max = numeric_limits::max(); ll ALPHABET_N = 26; using mint = modint998244353; #define rep(i, n) for (ll i = (ll)0; i < (ll)n; i++) #define rep_(i, k, n) for (ll i = (ll)k; i < (ll)n; i++) #define all(a) a.begin(), a.end() struct Node { ll l; ll r; ll src_l; ll src_r; }; Node op(Node a, Node b) { Node ret; if (a.l < b.l) { ret.l = a.l; ret.src_l = a.src_l; } else { ret.l = b.l; ret.src_l = b.src_l; } if (b.r < a.r) { ret.r = a.r; ret.src_r = a.src_r; } else { ret.r = b.r; ret.src_r = b.src_r; } return ret; } Node e() { Node ret{ll_max, ll_min, -1, -1}; return ret; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll n, q; cin >> n >> q; vector> A(n); rep(i, n) { ll a; cin >> a; A[i] = {a, i}; } sort(all(A)); segtree seg(n); rep(i, n) { ll idx = A[i].second; seg.set(i, Node{idx, idx, i, i}); } rep(_, q) { ll t; cin >> t; ll x; cin >> x; pair key = {x, ll_max}; auto it = upper_bound(all(A), key); ll dist = distance(A.begin(), it); Node nd = seg.prod(dist, n); if (t == 1) { if (nd.l == ll_max) { cout << -1 << endl; } else { cout << nd.l + 1 << endl; seg.set(nd.src_l, e()); } } else { if (nd.r == ll_min) { cout << -1 << endl; } else { cout << nd.r + 1 << endl; seg.set(nd.src_r, e()); } } } return 0; }