#include<bits/stdc++.h>
using namespace std;
int n,t=0,tree[1000010],inf=0x7fffffff,MOD;
char op[5];
inline void pushup(int id)
{
tree[id]=max(tree[id<<1],tree[id<<1|1]);
return;
}
inline void build(int id,int l,int r)
{
if(l==r)
{
tree[id]=0;
}
int mid=(l+r)>>1;
build(id<<1,l,mid);
build(id<<1|1,mid+1,r);
pushup(id);
}
inline void update(int id,int l,int r,int x,int v)
{
if(l==r)
{
tree[id]=v;
return;
}
int mid=(l+r)>>1;
if(x<=mid)
{
update(id<<1,l,mid,x,v);
}
else
{
update(id<<1|1,mid+1,r,x,v);
}
pushup(id);
}
inline int query(int id,int x,int y,int l,int r)//x,y表示要查的区间,l,r表示目前查的区间
{
if(l>=x&&r<=y)
{
return tree[id];
}
int mid=(l+r)>>1;
int ans=-inf;
if(x<=mid)
{
ans=max(ans,query(id<<1,x,y,l,mid));
}
if(y>mid)
{
ans=max(ans,query(id<<1|1,x,y,mid+1,r));
}
return ans;
}
int main()
{
scanf("%d %d",&n,&MOD);
build(1,1,n);
int tmp;
while(n--)
{
scanf("%s",op);
if(op[0]=='A')//修改
{
scanf("%d",&tmp);
update(1,1,n,tmp,t);
}
else//查询
{
int l;
scanf("%d",&l);
int iakioi=query(1,n-l+1,n,1,n)%MOD;
printf("%d",iakioi);
t=iakioi;
puts("");
}
}
}