#include<bits/stdc++.h>
#define r Read()
#define int long long
#define MAX 0x3f3f3f3f
#define MIN -0x3f3f3f3f
using namespace std;
int read();
int nn,nnn,n,in,tot,root,xxxx,ch[1000010][5],v[1000010],w[1000010],cnt[1000010],size[1000010];
int Read(){
int dx=0,x=1;
char xx=getchar();
for(;xx<'0'||xx>'9';xx=getchar())
if(xx=='-')
x=-1;
for(;xx>='0'&&xx<='9';dx=dx*10+xx-48,xx=getchar());
return dx*x;
}
int New(int x){
tot++;
v[tot]=x;
w[tot]=rand();
size[tot]=cnt[tot]=1;
return tot;
}
void Update(int id){
size[id]=size[ch[id][0]]+size[ch[id][1]]+cnt[id];
}
void Build(){
root=New(MIN);
ch[root][1]=New(MAX);
Update(root);
}
void Rotate(int &id,int xx){
int temp=ch[id][xx^1];
ch[id][xx^1]=ch[temp][xx];
ch[temp][xx]=id;
id=temp;
Update(ch[id][xx]);
Update(id);
}
void Insert(int &id,int x){
if(!id){
id=New(x);
return;
}
if(x==v[id])
cnt[id]++;
else{
int xx=x<v[id]?0:1;
Insert(ch[id][xx],x);
if(w[id]<w[ch[id][xx]])
Rotate(id,xx^1);
}
Update(id);
}
void Remove(int &id,int x){
if(!id)
return;
if(x==v[id]){
if(cnt[id]>1){
cnt[id]--;
Update(id);
return;
}
if(ch[id][0]||ch[id][1]){
if(!ch[id][1]||w[ch[id][0]]>w[ch[id][1]]){
Rotate(id,1);
Remove(ch[id][1],x);
}else{
Rotate(id,0);
Remove(ch[id][0],x);
}
Update(id);
}else
id=0;
return;
}
if(x<v[id])
Remove(ch[id][0],x);
else
Remove(ch[id][1],x);
Update(id);
}
int Getrank(int id,int x){
if(!id)
return 1;
if(x==v[id])
return size[ch[id][0]]+1;
if(x<v[id])
return Getrank(ch[id][0],x);
return size[ch[id][0]]+cnt[id]+Getrank(ch[id][1],x);
}
int Getv(int id,int x){
if(!id)
return -1;
if(x<=size[ch[id][0]])
return Getv(ch[id][0],x);
if(x<=size[ch[id][0]]+cnt[id])
return v[id];
return Getv(ch[id][1],x-size[ch[id][0]]-cnt[id]);
}
int Getlast(int x){
int id=root,xx;
for(;id;){
if(v[id]==x)
return x;
if(v[id]<x){
xx=v[id];
id=ch[id][1];
}else
id=ch[id][0];
}
return xx;
}
int Getnext(int x){
int id=root,xx;
for(;id;){
if(v[id]>x){
xx=v[id];
id=ch[id][0];
}else
id=ch[id][1];
}
return xx;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
Build();
cin>>n>>in;
for(int o=1;o<=n;o++){
char xx;
int xxx,xxxxx,xxxxxx;
cin>>xx>>xxx;
switch(xx){
case 'I':
if(xxx-xxxx>=in){
Insert(root,xxx-xxxx);
nn++;
nnn++;
}
break;
case 'A':
in-=xxx;
xxxx+=xxx;
case 'S':
in+=xxx;
xxxx-=xxx;
xxxxx=in-1;
for(;Getlast(xxxxx)!=MIN;){
xxxxxx=xxxxx;
xxxxx=Getlast(xxxxx);
Remove(root,Getlast(xxxxxx));
nn--;
}
break;
case 'F':
if(nn<xxx)
cout<<"-1\n";
else
cout<<Getv(root,nn-xxx+2)+xxxx<<"\n";
}
}
cout<<nnn-nn;
return 0;
}