#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
char c[1];
int n,mn,x,cnt,delta,root,leave;
int size[100005],num[100005],l[100005],r[100005],rnd[100005];
void updata(int x)
{
size[x]=size[l[x]]+size[r[x]]+1;
}
void rturn(int &k)
{
int t=l[k];l[k]=r[t];r[t]=k;updata(k);updata(t);k=t;
}
void lturn(int &k)
{
int t=r[k];r[k]=l[t];l[t]=k;updata(k);updata(t);k=t;
}
void insert(int &k,int x)
{
if (!k)
{
k=++cnt;
num[k]=x;
rnd[k]=rand();
size[k]=1;
return;
}
size[k]++;
if (x<num[k])
{
insert(l[k],x);
if (rnd[l[k]]<rnd[k]) rturn(k);
}
else
{
insert(r[k],x);
if (rnd[r[k]]<rnd[k]) lturn(k);
}
}
int del(int &k,int x)
{
int t;
if (!k) return 0;
if (num[k]<x)
{
t=size[l[k]]+1;
k=r[k];
return t+del(k,x);
}
else
{
t=del(l[k],x);
size[k]-=t;
return t;
}
}
int find(int k,int x)
{
if (size[l[k]]+1==x) return num[k]+delta;
if (size[l[k]]+1>x) return find(l[k],x);
if (size[l[k]]+1<x) return find(r[k],x-size[l[k]]-1);
}
int main()
{
scanf("%d%d",&n,&mn);
while(n--)
{
scanf("%s%d",c,&x);
if (c[0]==‘I‘)
if (x>=mn) insert(root,x-delta);
if (c[0]==‘A‘) delta+=x;
if (c[0]==‘S‘)
{
delta-=x;
leave+=del(root,mn-delta);
}
if (c[0]==‘F‘)
if (x>size[root]) printf("-1\n");
else printf("%d\n",find(root,size[root]-x+1));
}
printf("%d",leave);
return 0;
}