#include #include using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rep1(i, n) for (int i = 1; i < (int)(n); i++) #define rrep(i, n) for (int i = (int)(n)-1; i >= 0; i--) #define int long long #define ll long long #define ALL(v) (v).begin(), (v).end() #define NP next_permutation #define PLL pair #define VL vector #define VVL vector> #define VVVL vector>> #define VPLL vector> #define STL set #define MPLL map #define SP fixed << setprecision(12) constexpr ll inf = 4001001001001001001ll; constexpr ll mod = /* 1000000007 */ 998244353; constexpr double pi = 3.141592653589793; constexpr double eps = 0.00000000001; vector d8x = {1,1,0,-1,-1,-1,0,1}; vector d8y = {0,1,1,1,0,-1,-1,-1}; vector d4x = {1,0,-1,0}; vector d4y = {0,1,0,-1}; //小数出力 //cout << setprecision(12); //struct struct Ruiseki{ vector v; Ruiseki(vector &vec){ ll n = vec.size(); v.resize(n+1); rep(i,n) v[i+1] = v[i] + vec[i]; } ll get(ll l,ll r){//閉区間!! return v[r+1]-v[l]; } }; //max template< typename T1, typename T2 > inline bool chmax(T1 &a, T2 b) { return a < b && (a = b, true); } //min template< typename T1, typename T2 > inline bool chmin(T1 &a, T2 b) { return a > b && (a = b, true); } //join template string join(vector &vec ,const string &sp=" "){ int si = vec.size(); if(si==0){ return ""; }else{ stringstream ss; rep(i,si-1){ ss << vec[i] << sp; } ss << vec[si - 1]; return ss.str(); } } //print void print() { cout << endl; } template void print(const T &t) { cout << t << endl; } template void print(pair &p) {cout << p.first << ' ' << p.second << endl;} template void print(vector &vec){cout << join(vec) << endl; } template void print(const Head &head, const Tail &... tail) { cout << head << ' '; print(tail...); } //Yes string Yes(bool x){ if(x) return "Yes\n"; return "No\n"; } string YES(bool x){ if(x) return "YES\n"; return "NO\n"; } bool in_range(int l,int x,int r){//閉区間 return ((l <= x ) && (x <= r) )||( (r <= x ) && (x <= l)); } int div_ceil(int x,int y){ return (x+y-1)/y; } void yakubun(ll &a,ll &b){ ll g = gcd(a,b); a /= g; b /= g; } ll _sqrt(ll x){ ll a=sqrt(x); while((a+1)*(a+1)<=x) a++; while(a*a>x) a--; return a; } //Template End struct GetKth{ multiset lower; multiset upper; ll k; GetKth(ll a){ k = a; } void insert(ll n){ lower.insert(n); if((ll)lower.size() > k){ ll a = *lower.rbegin(); lower.erase(lower.find(a)); upper.insert(a); } } ll get(){ if((ll)lower.size() < k) return inf; else return *lower.rbegin(); } void erase(ll n){ if(n <= get()){ // print("erase",n); lower.erase(lower.find(n)); if((ll)upper.size() > 0){ ll a = *upper.begin(); // print("move",a); upper.erase(upper.find(a)); lower.insert(a); } }else{ upper.erase(upper.find(n)); } } ll size(){ return upper.size() + lower.size(); } }; signed main(void){ ll q,k; cin >> q >> k; GetKth gk(k); rep(i,q){ ll t; cin >> t; if(t == 1){ ll a; cin >> a; gk.insert(a); }else{ ll a = gk.get(); if(a == inf) cout << -1 << endl; else{ cout << a << endl; gk.erase(a); } } } }