#include <iostream>
using namespace std;
typedef long long ll;
const ll N=2e5+5,inf=0x3f3f3f3f3f3f3f3f;
char op;
ll q,mod,n,pre,cnt;
template<typename T=int>
inline T read(){
T X=0; bool flag=1; char ch=getchar();
while(ch<'0' || ch>'9'){if(ch=='-') flag=0; ch=getchar();}
while(ch>='0' && ch<='9') X=(X<<1)+(X<<3)+ch-'0',ch=getchar();
if(flag) return X;
return ~(X-1);
}
template<typename T=int>
inline void write(T X){
if(X<0) putchar('-'),X=~(X-1);
T s[20],top=0;
while(X) s[++top]=X%10,X/=10;
if(!top) s[++top]=0;
while(top) putchar(s[top--]+'0');
putchar('\n');
}
template<class T=ll>
class SgT{
public:
SgT(int rt=-1,int l=0,int r=0,T *_a=nullptr):a_res(new T[N]){
for(int i=0; i<N; i++){
a_res[i]=-inf;
}
seta(_a);
if(rt!=-1) build(rt,l,r);
}
~SgT(){
delete a_res;
}
void seta(T *_a){
if(_a==nullptr) a=a_res;
else a=_a;
}
void build(int rt,int l,int r){
t[rt].l=l,t[rt].r=r;
if(l==r){
t[rt].v=a[l];
return;
}
int mid=l+r>>1;
build(ls(rt),l,mid);
build(rs(rt),mid+1,r);
}
void update(int rt,int idx,T v){
if(t[rt].l==idx && t[rt].r==idx){
t[rt].v=(t[rt].v+v)%mod;
return;
}
int mid=t[rt].l+t[rt].r>>1;
if(idx<=mid) update(ls(rt),idx,v);
else update(rs(rt),idx,v);
pushup(rt);
}
T query(int rt,int l,int r){
if(l<=t[rt].l && t[rt].r<=r){
return t[rt].v;
}
T res=-inf;
int mid=t[rt].l+t[rt].r>>1;
if(l<=mid) res=max(res,query(ls(rt),l,r));
if(r>mid) res=max(res,query(rs(rt),l,r));
return res;
}
private:
T *a,*a_res;
struct node{
int l,r;
T v;
}t[N<<2];
inline int ls(int rt){return rt<<1;}
inline int rs(int rt){return rt<<1|1;}
inline void pushup(int rt){
t[rt].v=max(t[ls(rt)].v,t[rs(rt)].v);
}
};
SgT t;
int main(){
q=read(),mod=read();
t.build(1,1,q);
while(q--){
cin >> op;
if(op=='Q'){
if(!(n=read())){
puts("0");
continue;
}
write(pre=t.query(1,cnt-n+1,cnt));
}else{
n=read();
t.update(1,++cnt,(n+pre)%mod);
}
}
return 0;
}
/kk,萌新调了几天了QwQ,求大佬相助