#include<bits/stdc++.h>
using namespace std;
#define int long long
#define F(i,a,b) for(int i=a;i<=b;i++)
#define ls(x) ls[x]
#define rs(x) rs[x]
const int N=1e6+5;
int ls[N],rs[N],siz[N],tot,val[N],pre[N],rt,x,y,n,m,Delta;
char c;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9')
{
if (c == '-')
f *= -1;
c = getchar();
}
while (c <= '9' && c >= '0')
{
x = (x << 3) + (x << 1) + (c ^ 48);
c = getchar();
}
return x * f;
}
inline int Make_Edge(int k){
siz[++tot]=1;
val[tot]=k;
pre[k]=rand();
return tot;
}
inline void Update(int x){
siz[x]=siz[ls(x)]+siz[rs(x)]+1;
return;
}
inline void spilt(int now,int k,int &x,int &y){
if(!now){
x=0,y=0;
return;
}
if(val[now]<=k){
x=now;
spilt(rs(now),k,rs(now),y);
}else{
y=now;
spilt(ls(now),k,x,ls(now));
}
Update(now);
}
inline int Merge(int x,int y){
if(!x||!y) return x|y;
if(pre[x]<pre[y]){
rs(x)=Merge(rs(x),y);
Update(x);
return x;
}else{
ls(y)=Merge(x,ls(y));
Update(y);
return y;
}
}
inline void insert(int k){
if(k<m) return;
spilt(rt,k-Delta,x,y);
rt=Merge(x,Merge(Make_Edge(k-Delta),y));
}
inline int kth(int now,int k){
while(true){
if(k<=siz[ls(now)]) now=ls(now);
if(siz[ls(now)]+1==k) return now;
if(k>siz[ls(now)]){k-=siz[ls(now)]+1;now=rs(now);}
}
}
signed main(){
srand(time(0));
n=read(),m=read();
int Left=0;
for(int i=1,k;i<=n;i++){
cin>>c;k=read();
if(c=='I'){insert(k);}
if(c=='A'){Delta+=k;}
if(c=='S'){Delta-=k;spilt(rt,m-Delta-1,x,y),rt=y;Left+=siz[x];}
if(c=='F'){if(siz[rt]<k){printf("-1\n");continue;}}
}
cout<<Left<<endl;
return 0;
}