#include #include #include #include using namespace std; typedef long long LL; const int N = 200010; struct Query { int op; LL v; }; LL mm2[N]; set s; Query qs[N]; map mm; int q, k, sz, mm_idx; struct BIT { int tr[N]; int LowBit(int x) { return x & -x; } void Add(int x, int v) { for (int i = x; i < N; i += LowBit(i)) tr[i] += v; } int Sum(int x) { int ret = 0; for (int i = x; i; i -= LowBit(i)) ret += tr[i]; return ret; } }; BIT bit; int Query() { int l = 1, r = N; while (l < r) { int mid = l + r >> 1; if (bit.Sum(mid) >= k) r = mid; else l = mid + 1; } return l; } int main() { // freopen("qk.in", "r", stdin); // freopen("qk.out", "w", stdout); scanf("%d%d", &q, &k); for (int i = 1; i <= q; ++i) { int op; scanf("%d", &op); if (op == 1) { LL v; scanf("%lld", &v); qs[i] = { op, v }; s.insert(v); } else { qs[i] = { op, -1 }; } } for (auto i : s) { if (!mm.count(i)) { mm[i] = ++mm_idx; mm2[mm_idx] = i; } } for (int i = 1; i <= q; ++i) { if (qs[i].op == 1) { int pos = mm[qs[i].v]; bit.Add(pos, 1); ++sz; } else { if (sz < k) puts("-1"); else { --sz; int pos = Query(); printf("%lld\n", mm2[pos]); bit.Add(pos, -1); } } } return 0; }