#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define N 1000003
using namespace std;
int hp[N];
void ct(int n)//堆的建立
{
while(n>1)
if(hp[n]<hp[n/2])
{
swap(hp[n],hp[n/2]);
n=n/2;
}
else
break;
}
void wh(int k)//堆的维护
{
int i=1,min;
while((i*2)<=k)
{
if(i*2+1<=k)
{
if(hp[i<<1]>hp[i<<1|1])
min=i<<1|1;
else
min=i<<1;
}
else
min=i<<1;
if(hp[i]>hp[min])
{
swap(hp[i],hp[min]);
i=min;
}
else
break;
}
}
int main()
{
int i,n,k,j,l,up;
char c;
while(scanf("%d%d",&n,&k)!=EOF)
{
getchar();
scanf("%c%d",&c,&up);
getchar();
hp[1]=up;l=2;
for(i=1;i<k;i++)
{
scanf("%c%d",&c,&up); getchar();
hp[l]=up;
ct(l);l++;
}
for(;i<n;i++)
{
scanf("%c",&c);
if(c=='Q')
{
printf("%d\n",hp[1]);
}
else
{
scanf("%d",&up);
if(up>hp[1])
{
hp[1]=up;
wh(k);
}
}
getchar();
}
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int i,n,k,ad;
char c;
while(scanf("%d%d",&n,&k)!=EOF)
{ priority_queue< int,vector<int>,greater<int> > pq;
getchar();
for(i=0;i<k;i++)
{
scanf("%c%d",&c,&ad);
pq.push(ad);getchar();
}
for(;i<n;i++)
{
scanf("%c",&c);
if(c=='Q')
printf("%d\n",pq.top());
else
{
scanf("%d",&ad);
if(ad>pq.top())
{
pq.pop();
pq.push(ad);
}
}
getchar();
}
}
}