#include <fstream>
using namespace std;
ifstream is ("disjoint.in");
ofstream os ("disjoint.out");
const int Nmax = 100001;
int N, Q;
int T[Nmax], Sz[Nmax];
int Root(int x);
void Join(int a, int b);
int main()
{
is >> N >> Q;
for (int i = 1; i <= N; ++i)
T[i] = i, Sz[i] = 1;
for (int i = 1, op, a , b; i <= Q; ++i)
{
is >> op >> a >> b;
if (op == 1)
Join(a, b);
else
if (Root(a) == Root(b))
os << "DA\n";
else
os << "NU\n";
}
is.close();
os.close();
}
int Root(int x) //find root and compress tree
{
int R;
for (R = x; R != T[R]; R = T[R]);
for (int aux; x != T[x]; aux = T[x], T[x] = R, x = aux);
return R;
}
void Join(int a, int b)
{
int Ra = Root(a);
int Rb = Root(b);
if (Sz[Ra] > Sz[Rb]) T[Rb] = Ra;
else T[Ra] = Rb;
if (Sz[Ra] == Sz[Rb])
Sz[Rb]++;
}