#include<bits/stdc++.h>
#define int long long
#define ls i<<1
#define rs i<<1|1
using namespace std;
const int N=2e5+5;
const int inf=9e18;
struct node{
int maxn,l,r,tag;
}t[N<<2];
int q,mod,lstans,n;
void build(int i,int l,int r){
t[i]={-inf,l,r,0};
if(l==r) return;
int mid=l+r>>1;
build(ls,l,mid);
build(rs,mid+1,r);
}
void pd(int i){
t[ls].tag=(t[ls].tag+t[i].tag)%mod;
t[rs].tag=(t[rs].tag+t[i].tag)%mod;
t[ls].maxn=(t[ls].maxn+t[i].tag)%mod;
t[rs].maxn=(t[rs].maxn+t[i].tag)%mod;
t[i].tag=0;
}
void add(int i,int l,int r,int x){
if(l<=t[i].l&&t[i].r<=r){
t[i].tag=(t[i].tag+x)%mod;
t[i].maxn=(t[i].maxn+x)%mod;
return;
}
pd(i);
int mid=t[i].l+t[i].r>>1;
if(l<=mid) add(ls,l,r,x);
if(r>=mid+1) add(rs,l,r,x);
t[i].maxn=max(t[ls].maxn,t[rs].maxn);
}
int query(int i,int l,int r){
if(l<=t[i].l&&t[i].r<=r){
return t[i].maxn;
}
pd(i);
int mid=t[i].l+t[i].r>>1;
int ans=-inf;
if(l<=mid) ans=max(ans,query(ls,l,r));
if(r>=mid+1) ans=max(ans,query(rs,l,r));
return ans;
}
signed main(){
cin>>q>>mod;
build(1,1,q);
while(q--){
char op;cin>>op;
if(op=='Q'){
int l;
cin>>l;
lstans=query(1,n-l+1,n);
cout<<lstans<<'\n';
}else{
int x;
cin>>x;
++n;
add(1,n,n,(lstans+x)%mod);
}
}
return 0;
}