#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5, m = 1e6;
int n, q, l[N], r[N], vc[N][10], id[N], Max[N << 1];
bool vis[N], a[N];
set <int> s[N];
vector <int> v[N];
int ls (int x){return x << 1;}
int rs (int x){return x << 1 | 1;}
void push_up (int x){Max[x] = max (Max[ls (x)], Max[rs (x)]);}
void build (int x, int l, int r)
{
if (l == r)return;
int mid = (l + r) >> 1;
build (ls (x), l, mid);
build (rs (x), mid + 1, r);
}
void update (int x, int l, int r, int L, int R, int d)
{
if (l == r)return Max[x] = d, void ();
int mid = (l + r) >> 1;
if (L <= mid)update (ls (x), l, mid, L, R, d);
if (mid < R)update (rs (x), mid + 1, r, L, R, d);
push_up (x);
}
int query (int x, int l, int r, int L, int R)
{
if (L <= l && r <= R)return Max[x];
int mid = (l + r) >> 1, res = 0;
if (L <= mid)res = max (res, query (ls (x), l, mid, L, R));
if (mid < R)res = max (res, query (rs (x), mid + 1, r, L, R));
return res;
}
void pre ()
{
for (int i = 2; i <= n; ++ i)if (! vis[i])
{
vc[i][++ id[i]] = i;
v[i].push_back (i);
for (int j = 2; i * j <= n; ++ j)
{
vis[i * j] = 1;
vc[i * j][++ id[i * j]] = i;
v[i * j].push_back (i);
}
}
}
signed main ()
{
ios::sync_with_stdio (0), cin.tie (0), cout.tie (0);
freopen ("hack.in", "r", stdin);
freopen ("hack.out", "w", stdout);
cin >> n >> q;
pre ();
int c = 1;
for (int i = 1; i <= n; ++ i)
{
l[i] = c;
c += id[i];
r[i] = c - 1;
}
build (1, 1, r[n]);
while (q --)
{
char op;
int x, y;
cin >> op >> x;
if (op == 'S')
{
if (a[x])
{
for (int i = 1; i <= id[x]; ++ i)
{
int vv = vc[x][i];
set<int>::iterator it = s[vv].find (x);
if (s[vv].size () == 1)
{
s[vv].erase (it);
continue;
}
int p = 0;
if (it != s[vv].begin ())
{
-- it;
p = l[*it] + lower_bound (v[*it].begin (), v[*it].end (), vv) - v[*it].begin ();
update (1, 1, m, l[x] + i - 1, l[x] + i - 1, 0);
++ it;
}
set<int>::iterator it2 = s[vv].end ();
if (it != -- it2)
{
++ it;
int k = lower_bound (v[*it].begin (), v[*it].end (), vv) - v[*it].begin ();
update (1, 1, m, l[*it] + k, l[*it] + k, p);
-- it;
}
s[vv].erase (it);
}
}
else
{
for (int i = 1; i <= id[x]; ++ i)
{
int vv = vc[x][i];
if (s[vv].size () == 0)
{
s[vv].insert (x);
continue;
}
set<int>::iterator it = s[vv].lower_bound (x);
int p = 0;
if (it != s[vv].begin ())
{
-- it;
p = *it;
int k = lower_bound (v[*it].begin (), v[*it].end (), vv) - v[*it].begin ();
update (1, 1, m, l[x] + i - 1, l[x] + i - 1, l[*it] + k);
++ it;
}
set<int>::iterator it2 = s[vv].end ();
if (it != it2)
{
int k = lower_bound (v[*it].begin (), v[*it].end (), vv) - v[*it].begin ();
update (1, 1, m, l[*it] + k, l[*it] + k, l[x] + i - 1);
}
s[vv].insert (x);
}
}
a[x] ^= 1;
}
else
{
cin >> y;
int Maxx = query (1, 1, m, l[x], r[y]);
if (Maxx >= l[x])puts ("DA");
else puts ("NE");
}
}
return 0;
}