#include #define int long long using namespace std; using Int = long long; //BEGIN CUT HERE template struct AVL{ struct node{ T key; int size,height; node *child[2]; node (const T &key):key(key),size(1),height(1){ child[0]=child[1]=0; } } *root; typedef node *pointer; AVL(){root=NULL;} pointer find(T key){ return find(root,key); } node *find(node *t,const T key){ if(t==NULL) return NULL; if(key==(t->key)) return t; else if(key<(t->key)) return find(t->child[0],key); else return find(t->child[1],key); } void insert(const T key){ root=insert(root,new node(key)); } node *insert(node *t,node *x){ if(t==NULL) return x; if((x->key)<=(t->key)) t->child[0]=insert(t->child[0],x); else t->child[1]=insert(t->child[1],x); t->size+=1; return balance(t); } void erase(const T key){ T t=key; if(find(t)==NULL) return; root=erase(root,key); } node *erase(node *t,const int x){ if(t==NULL) return NULL; if(x==(t->key)){ return move_down(t->child[0],t->child[1]); }else{ if(x<(t->key)) t->child[0]=erase(t->child[0],x); else t->child[1]=erase(t->child[1],x); t->size-=1; return balance(t); } } node *move_down(node *t,node *rhs){ if(t==NULL) return rhs; t->child[1]=move_down(t->child[1],rhs); return balance(t); } int sz(node *t){ if(t!=NULL) return t->size; return 0; } int ht(node *t){ if(t!=NULL) return t->height; return 0; } node *rotate(node *t,int l,int r){ node *s=t->child[r]; t->child[r]=s->child[l]; s->child[l]=balance(t); if(t!=NULL) t->size=sz(t->child[0])+sz(t->child[1])+1; if(s!=NULL) s->size=sz(s->child[0])+sz(s->child[1])+1; return balance(s); } node *balance(node *t){ for(int i=0;i<2;i++){ if(ht(t->child[!i])-ht(t->child[i])<-1){ if(ht(t->child[i]->child[!i])-ht(t->child[i]->child[i])>0) t->child[i]=rotate(t->child[i],i,!i); return rotate(t,!i,i); } } if(t!=NULL) t->height=max(ht(t->child[0]),ht(t->child[1]))+1; if(t!=NULL) t->size=sz(t->child[0])+sz(t->child[1])+1; return t; } pointer rank(int k){ return rank(root,k); } pointer rank(node *t,int k){ if(t==NULL) return NULL; int m=sz(t->child[0]); if(kchild[0],k); if(k==m) return t; if(k>m) return rank(t->child[1],k-m-1); } int index(T key){ if(find(key)==NULL) return -1; return index(root,key); } int index(node *t,T key){ if(key==(t->key)) return sz(t->child[0]); if(key<(t->key)) return index(t->child[0],key); else return sz(t)-sz(t->child[1])+index(t->child[1],key); } }; signed main(){ Int q, k; cin >> q >> k; AVL avl; Int sz = 0; for(int i=0;i> t; if(t==1){ cin >> x; avl.insert(x); sz++; }else{ if(sz < k){ cout << -1 << endl; continue; } Int key=avl.rank(k-1)->key; cout<