#include <bits/stdc++.h>
#define int long long
using namespace std;
#define rep(i, l, r) for(int i = l; i <= r; ++ i)
#define per(i, r, l) for(int i = r; i >= l; -- i)
#define ls rt + rt
#define rs rt + rt + 1
const int N = 5e5 + 10;
int p, n, Q;
struct Segment_Tree
{
int sum[N << 2], tag[N << 2];
void update(int rt) { sum[rt] = max(sum[ls], sum[rs]); }
void push_up(int rt, int l, int r, int val)
{
tag[rt] += val;
sum[rt] += val * (r - l + 1);
}
void push_down(int rt, int l, int r)
{
int mid = (l + r) >> 1;
push_up(ls, l, mid, tag[rt]);
push_up(rs, mid + 1, r, tag[rt]);
tag[rt] = 0;
}
void change(int rt, int l, int r, int x, int y, int val)
{
if (l >= x && r <= y) {push_up(rt, l, r, val); return;}
push_down(rt, l, r);
int mid = (l + r) >> 1;
if (x <= mid) change(ls, l, mid, x, y, val);
if (y > mid) change(rs, mid + 1, r, x, y, val);
update(rt);
}
int ask(int rt, int l, int r, int x, int y)
{
int ans = -1e18;
if (l >= x && r <= y) return sum[rt];
int mid = (l + r) >> 1;
push_down(rt, l, r);
if (x <= mid) ans = max(ans, ask(ls, l, mid, x, y));
if (y > mid) ans = max(ans, ask(rs, mid + 1, r, x, y));
return ans;
}
}t;
main()
{
scanf("%lld%lld", &Q, &p);
n = 1;
int o = 0;
rep(i, 1, Q)
{
char a; int x;
cin >> a; scanf("%d", &x);
if(a == 'Q')
{
o = t.ask(1, 1, Q, n - x + 1, n) % p;
printf("%lld\n", o);
}
else
{
++ n;
t.change(1, 1, Q, n, n, (x + o) % p);
}
}
return 0;
}