#include <iostream>
#include <stack>
using namespace std;
const int MAXN = 50005;
int L[4 * MAXN], R[4 * MAXN];
int flag;
void build(int l, int r, int rt)
{
L[rt] = R[rt] = r - l + 1;
if (l == r)
return;
int m = (l + r) >> 1;
build(l, m, rt << 1);
build(m + 1, r, rt << 1 | 1);
}
void pushup(int rt, int m)
{
L[rt] = L[rt << 1];
R[rt] = R[rt << 1 | 1];
if (L[rt] == m - (m >> 1))
L[rt] += L[rt << 1 | 1];
if (R[rt] == m >> 1)
R[rt] += R[rt << 1];
}
void update(int p, int num, int l, int r, int rt)
{
if (l == r)
{
L[rt] = R[rt] = num;
return;
}
int m = (l + r) >> 1;
if (p <= m)
update(p, num, l, m, rt << 1);
else
update(p, num, m + 1, r, rt << 1 | 1);
pushup(rt, r - l + 1);
}
int query(int p, int l, int r, int rt)
{
if (R[rt] >= r - p + 1)
{
flag = 1;
return R[rt];
}
if (L[rt] >= p - l + 1)
{
flag = 1;
return L[rt];
}
if (l == r)
return 0;
int m = (l + r) >> 1;
int total = 0;
if (p > m)
{
total = query(p, m + 1, r, rt << 1 | 1);
if (flag)
{
flag = 0;
total += R[rt << 1];
}
}
else
{
total = query(p, l, m, rt << 1);
if (flag)
{
flag = 0;
total += L[rt << 1 | 1];
}
}
return total;
}
int main()
{
int n, m;
while (cin >> n >> m)
{
build(1, n, 1);
char c;
int num;
stack<int> st;
for (int i = 0; i < m; i++)
{
cin >> c;
if (c == 'D')
{
cin >> num;
st.push(num);
update(num, 0, 1, n, 1);
}
else if (c == 'Q')
{
flag = 0;
cin >> num;
cout << query(num, 1, n, 1) << endl;
}
else
{
num = st.top();
st.pop();
update(num, 1, 1, n, 1);
}
}
}
return 0;
}