#include <fstream>
using namespace std;
ofstream fout("disjoint.out");
ifstream fin("disjoint.in");
const int NMAX = 100005;
int n, m, op;
int v[NMAX], rang[NMAX];
void update(int x, int y)
{
if(rang[x] > rang[y]) v[y] = x;
else v[x] = y;
if(rang[x] == rang[y]) rang[y]++;
}
int query(int x)
{
int rad = x, y = 0;
while(v[rad] != rad) rad = v[rad];
/* while(v[x] != x)
{
y = v[x];
v[x] = rad;
x = y;
} */
return rad;
}
int main()
{
int x, y;
fin >> n >> m;
for(int i=1; i<=n; i++) {
v[i] = i;
rang[i] = 1;
}
for(int i=1; i<=m; i++) {
fin >> op >> x >> y;
switch (op)
{
case 1: {
if(query(x) != query(y)) update(query(x), query(y));
break;
}
case 2: {
if(query(x) == query(y)) fout << "DA\n";
else fout << "NU\n";
break;
}
default: break;
}
}
return 0;
}