#include<cstdio>
#define ll long long
using namespace std;
const int N=200000;
template<typename T>
void read(T &x){//快读数字
x=0;
int f=1;
char ch=getchar();
while (ch<'0'||ch>'9'){
if (ch=='-')
f=-1;
ch=getchar();
}
while (ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
x*=f;
}
template<typename T>
void write(T x){//快写数字
if (x<0){
putchar(' ');
x*=-1;
}
if (x>9)
write(x/10);
putchar(x%10+0x30);
}
void readch(char &ch){//快读字符
ch=getchar();
while (ch<'A'||ch>'Z')
ch=getchar();
}
struct mpstk{//单调栈
int p=0;
int len=0;
ll t=0;
ll a[N+5];
int x[N+5];
void add(ll b,ll P){//添加元素
b=(b+t)%P;
while (len&&x[len]<b)
--len;
x[++len]=b;
a[len]=++p;
t=b;
}
void query(int L){//二分查找
int l=1,r=len,m;
while (l<r){
m=(l+r)>>1;
if (a[m]>=p-L+1)
r=m;
else
l=m+1;
}
write(x[l]);
putchar('\n');
}
};
int M;
ll P,n;
char c;
mpstk a;
int main(){
read(M);read(P);
while (M--){
readch(c);
read(n);
if (c=='A')
a.add(n,P);
else
a.query(n);
}
return 0;
}