#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 2e5 + 5;
int tree[4 * maxn];
void pushup(int i)
{
tree[i] = max(tree[i << 1], tree[i << 1 | 1]);
}
void build(int i, int l, int r)
{
if(l == r)
{
tree[i] = 0;
return;
}
int mid = (l + r) / 2;
build(i << 1, l, mid);
build(i << 1 | 1, mid + 1, r);
pushup(i);
}
void update(int i, int l, int r, int x, int val)
{
if(l == r)
{
tree[i] = val;
return;
}
int mid = (l + r) / 2;
if (x <= mid) update(i << 1, l, mid, x, val);
else update(i << 1 | 1, mid + 1, r, x, val);
pushup(i);
}
int query(int i, int l, int r, int x, int y)
{
if(x <= l && r <= y) return tree[i];
int maxm = 0;
int mid = (l + r) / 2;
if(x <= mid) maxm = max(maxm, query(i << 1, l, mid, x, y));
if(y > mid) maxm = max(maxm, query(i << 1 | 1, mid + 1, r, x, y));
return maxm;
}
signed main()
{
int n, m;
cin >> n >> m;
int b, cnt = 1;
char opt;
build(1, 1, n);
int lst = 0;
while(n--)
{
cin >> opt;
while(opt != 'A' && opt != 'Q') cin >> opt;
cin >> b;
if(opt == 'Q')
{
int tmp = cnt - b;
lst = query(1, 1, n, tmp, cnt);
printf("%d\n", lst);
}
if(opt == 'A')
{
update(1, 1, n, cnt, (b + lst) % m);
cnt++;
}
}
}