#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int M;
long long D;
long long t = 0;
int cnt;
struct node{
int l, r;
long long ma;
}s[200010*4];
void build(int l, int r, int k){
s[k].l = l; s[k].r = r; s[k].ma = 0;
if(l == r){
return;
}
int mid = (l+r)>>1;
build(l, mid, 2*k);
build(mid+1, r, 2*k+1);
}
void update(int x, long long c, int k){
if(s[k].l == x && s[k].l == s[k].r){
s[k].ma = c;
return;
}
int mid = (s[k].l+s[k].r)>>1;
if(x<=mid) update(x, c, 2*k);
else update(x, c, 2*k+1);
s[k].ma = max(s[2*k].ma, s[2*k+1].ma);
}
long long query(int l, int r, int k){
if(s[k].l == l && s[k].r == r){
return s[k].ma;
}
int mid = (s[k].l+s[k].r)>>1;
if(r<=mid) return query(l, r, 2*k);
else if(l>mid) return query(l, r, 2*k+1);
else return max(query(l, mid, 2*k), query(mid+1, r, 2*k+1));
}
int main(){
cnt = 0;
scanf("%d %lld", &M, &D);
build(1, 200010, 1);
for(int i = 1; i<=M; i++){
char ch[3]; long long x;
scanf("%s %lld", ch, &x);
if(ch[0] == 'A'){
x = (x%D+t%D)%D;
update(++cnt, x, 1);
}
else{
printf("%lld\n", t=query(cnt-x+1, cnt, 1));
}
}
return 0;
}