#include <fstream>
using namespace std;
ofstream fout("disjoint.out");
ifstream fin("disjoint.in");
const int NMAX = 100005;
int n, m, op, x, y;
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;
while(v[rad] != rad) rad = v[rad];
return rad;
}
int main()
{
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(x, y);
break;
case 2:
if(query(x) == query(y)) fout << "DA\n";
else fout << "NU\n";
break;
default: break;
}
}
return 0;
}