#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long LL;
int m,idx;
LL d;
struct tree{
int l,r;
LL maxn=LONG_LONG_MIN;
}tr[N*8];
void push_up(int u){
tr[u].maxn=max(tr[u<<1].maxn,tr[u<<1|1].maxn);
}
void build(int u,int l,int r){
// cout<<l<<" "<<r<<endl;
if(l>r) return;
tr[u].l=l,tr[u].r=r;
if(l==r) return;
int mid=(l+r)>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
//push_up(u);
}
void modify(int u,int x,LL f){
if(tr[u].l==x && tr[u].r==x){
tr[u].maxn=f;
return;
}
int mid=(tr[u].l+tr[u].r)>>1;
if(x<=mid) modify(u<<1,x,f);
else modify(u<<1|1,x,f);
push_up(u);
}
LL query(int u,int l,int r){
if(tr[u].l>=l && tr[u].r<=r){
return tr[u].maxn;
}
int mid=(tr[u].l+tr[u].r)>>1;
LL v=LONG_LONG_MIN;
if(l<=mid) v=query(u<<1,l,mid);
if(r>mid) v=max(v,query(u<<1|1,mid+1,r));
return v;
}
int main(){
scanf("%d%lld",&m,&d);
build(1,1,m);
LL p=0;
while(m--){
char op;
LL t;
cin>>op>>t;
if(op=='A'){
idx++;
modify(1,idx,(t+p)%d);
}
else{
p=query(1,idx-t+1,idx);
printf("%lld\n",p);
}
}
return 0;
}