#include<bits/stdc++.h>
#define int long long
using namespace std;
int m,x,sum,mod,t;
char op;
int a[200010],tree[800010];
inline void update(int x,int l,int r,int find,int k){
if(l==r){
tree[x]=k;
return;
}
int mid=(l+r)/2;
if(find<=mid)
update(x*2,l,mid,find,k);
if(find>mid)
update(x*2+1,mid+1,r,find,k);
tree[x]=max(tree[x*2],tree[x*2+1])%mod;
}
inline int query(int x,int l,int r,int find_l,int find_r){
if(find_l<=l&&r<=find_r)return tree[x];
int mid=(l+r)/2,sm=-LONG_LONG_MAX;
if(find_l<=mid)
sm=max(query(x*2,l,mid,find_l,find_r),sm);
if(find_r>mid)
sm=max(query(x*2+1,mid+1,r,find_l,find_r),sm);
return sm%mod;
}
signed main(){
scanf("%lld%lld",&m,&mod);
for(int i=1;i<=m;i++){
cin>>op;
scanf("%d",&x);
if(op=='A'){
sum++;
update(1,1,m,sum,(x+t)%mod);
}
if(op=='Q'){
if(x==0)t=0;
else t=query(1,1,m,sum-x+1,sum)%mod;
printf("%lld\n",t);
}
}
return 0;
}
sub0最后一个点WA