#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdio.h>
#define N 100010
using namespace std;
int n,tt,le;
char a[N][3];
int m[N],X[N];
struct node
{
int l,r,w;
} q[4*N];
void pushup(int rt)
{
q[rt].w=q[rt<<1].w+q[rt<<1|1].w;
}
void build(int l,int r,int rt)
{
q[rt].l=l;
q[rt].r=r;
q[rt].w=0;
if(l==r) return ;
int mid=(l+r)>>1;
build(l,mid,rt<<1);
build(mid+1,r,rt<<1|1);
}
void update(int l,int r,int rt,int key)
{
if(l==r&&r==key)
{
q[rt].w=1;
return ;
}
int mid=(l+r)>>1;
if(key<=mid) update(l,mid,rt<<1,key);
else update(mid+1,r,rt<<1|1,key);
pushup(rt);
return ;
}
int query(int l,int r,int rt,int key)
{
if(l==r)
{
return l;
}
int mid=(l+r)>>1;
if(key<=q[rt<<1].w) return query(l,mid,rt<<1,key);
else return query(mid+1,r,rt<<1|1,key-q[rt<<1].w);
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
tt=0;
for(int i=0; i<n; i++)
{
scanf("%s%d",a[i],&m[i]);
if(a[i][0]=='P')
{
X[tt++]=m[i];
}
}
sort(X,X+tt);
int sum=unique(X,X+tt)-X;
build(1,sum,1);
for(int i=0; i<n; i++)
{
if(a[i][0]=='P')
{
le=lower_bound(X,X+sum,m[i])-X+1;
update(1,sum,1,le);
}
else if(a[i][0]=='Q')
{
if(q[1].w<m[i])
{
printf("-1\n");
}
else
{
int tt=query(1,sum,1,m[i]);
printf("%d\n",X[tt-1]);
}
}
}
}
return 0;
}