#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 200005
#define LL long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
using namespace std;
template<typename _type>
class SegmentTree
{
private:
struct node
{
int l,r;
_type maxv;
#define l(u) tree[u].l
#define r(u) tree[u].r
#define maxv(u) tree[u].maxv
#define siz(u) (r(u)-l(u)+1)
}tree[N*4];
void PushUp(int u)
{
maxv(u)=max(maxv(u*2),maxv(u*2+1));
}
public:
void Build(int u,int l,int r)
{
l(u)=l;
r(u)=r;
maxv(u)=0;
if(l(u)==r(u))
{
return;
}
int mid=(l(u)+r(u))>>1;
Build(u*2,l(u),mid);
Build(u*2+1,mid+1,r(u));
}
void UpData(int u,int x,_type val)
{
if(l(u)>x||r(u)<x)
{
return;
}
if(l(u)==r(u))
{
maxv(u)+=val;
return;
}
UpData(u*2,x,val);
UpData(u*2+1,x,val);
PushUp(u);
}
_type Ask(int u,int l,int r)
{
if(l(u)>r||r(u)<l)
{
return 0;
}
if(l(u)>=l&&r(u)<=r)
{
return maxv(u);
}
return max(Ask(u*2,l,r),Ask(u*2+1,l,r));
}
};
SegmentTree<LL> T;
char c;
LL m,d,n,t;
int cnt,L;
int main()
{
ios::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
cin>>m>>d;
T.Build(1,1,m);
while(m--)
{
cin>>c;
if(c=='A')
{
cin>>n;
T.UpData(1,++cnt,(n+t)%d);
}
else
{
cin>>L;
t=T.Ask(1,cnt-L+1,cnt);
cout<<t<<endl;
}
}
return 0;
}