#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 2e5 + 5;
struct Segment_Tree {
ll l, r, mx;
} t[N * 4];
ll m, d, temp, len, n;
void update(ll p) {
t[p].mx = max(t[p * 2].mx, t[p * 2 + 1].mx);
}
void build(ll l, ll r, ll p) {
t[p].l = l, t[p].r = r;
if (l == r) return;
ll mid = (l + r) >> 1;
build(p * 2, l, mid);
build(p * 2 + 1, mid + 1, r);
}
void change(ll p, ll x, ll v) {
if (t[p].l == t[p].r) {
t[p].mx = v;
return;
}
ll mid = (t[p].l + t[p].r) >> 1;
if (x <= mid) change(p * 2, x, v);
else change(p * 2 + 1, x, v);
update(p);
}
ll query(ll p, ll l, ll r) {
if (l <= t[p].l && r >= t[p].r) return t[p].mx;
ll mid = (t[p].l + t[p].r) >> 1;
ll val = -0x3f3f3f3f;
if (l <= mid) val = max(val, query(p * 2, l, r));
if (r > mid) val = max(val, query(p * 2 + 1, l, r));
return val;
}
signed main() {
cin >> m >> d;
build(1, 1, m);
for (ll i = 1; i <= m; i++) {
char op;
ll x;
cin >> op >> x;
if (op == 'Q') {
temp = query(1, n - x + 1, n);
cout << t << endl;
}
else change(1, ++n, (x + temp) % d);
}
return 0;
}