记录
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
namespace quickread{
inline int read(){
__int128 x=0;bool f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
inline void write(__int128 x){
if(x<0){putchar('-');x=-x;}
if(x>9)write(x/10);
putchar(x%10+'0');
}
inline char readchar(){
char ch=getchar();
while(ch!='A'&&ch!='Q') ch=getchar();
return ch;
}
}
using namespace quickread;
const int N=1e6+10;
const __int128 inf=0x3f3f3f3f3f3f3f3f;
int n,m,q,len;
__int128 mod,t,a[N],st[N],ed[N],pos[N],val[N];
void build(){
memset(a,-0x3f,sizeof(a));
len=sqrt(q)/2;
m=n/len;
if(m*len!=n) m++;
for(int i=1;i<=m;i++){
st[i]=ed[i-1]+1;
ed[i]=ed[i-1]+len;
}
for(int i=1;i<=m;i++){
val[i]=-inf;
for(int j=st[i];j<=ed[i];j++){
pos[j]=i;
val[i]=max(val[i],a[j]);
}
}
}
void update(__int128 k){
a[++n]=k%mod;
val[pos[n]]=max(val[pos[n]],k);
}
int query(int l,int r){
int lt=pos[l],rt=pos[r];
__int128 ans=-inf;
if(lt==rt){
for(int i=l;i<=r;i++) ans=max(ans,a[i]);
}else{
for(int i=lt+1;i<=rt;i++) ans=max(ans,val[i]);
for(int i=l;i<=ed[lt];i++) ans=max(ans,a[i]);
}
return ans;
}
signed main(){
q=read(),mod=read();
build();
while(q--){
char opt=readchar();
__int128 x=read();
if(opt=='A') {
update(x+t);
t=0;
}else{
t=query(n-x+1,n)%mod;
write(t),putchar('\n');
}
}
return 0;
}