import java.io.*;
class Main{
static BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out));
static Node[] tr;
public static void main(String[] args) throws Exception{
String[] ss = read.readLine().split(" ");
int m = Integer.valueOf(ss[0]), p = Integer.valueOf(ss[1]);
tr = new Node[m * 4];
int last = 0, n = 1, x;
buildTree(1, 1, m);
while(m -- > 0){
ss = read.readLine().split(" ");
x = Integer.valueOf(ss[1]);
if("Q".equals(ss[0])){
last = query(1, n - x + 1, n);
log.write(last + "\n");
}else{
modify(1, n + 1, (last + x) % p); //注意,这里根节点是1, 修改的数是从n + 1开始。
n++;
}
}
log.flush();
}
public static int query(int u, int l, int r){
if(tr[u].l >= l && tr[u].r <= r) return tr[u].v;
int mid = tr[u].l + tr[u].r >> 1;
int v = 0;
if(l <= mid) v = query(u << 1, l, r);
if(r > mid) v = Math.max(v, query(u << 1 | 1, l, r));
return v;
}
public static void pushUp(int u){
tr[u].v = Math.max(tr[u << 1].v, tr[u << 1 | 1].v);
}
public static void modify(int u, int x, int c){
if(tr[u].l == x && tr[u].r == x){
tr[u].v = c;
}else{
int mid = tr[u].l + tr[u].r >> 1;
if(x <= mid) modify(u << 1, x, c);
else modify(u << 1 | 1, x, c);
pushUp(u);
}
}
public static void buildTree(int u, int l, int r){
tr[u] = new Node(l, r);
if(l == r) return;
int mid = l + r >> 1;
buildTree(u << 1, l , mid);
buildTree(u << 1 | 1, mid + 1, r);
}
static class Node{
int l, r, v;
Node(int l, int r){
this.l = l;
this.r = r;
}
}
}