#include <iostream>
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
int r[NMAX], t[NMAX];
void unite(int a, int b){
if(r[a] > r[b])
t[b] = a;
else
t[a] = b;
if(r[a] == r[b])
r[b]++;
}
int root(int a){
int x = a, y;
while(t[x] != x)
x = t[x];
while(a != t[a]){
y = t[a];
t[a] = x;
a = y;
}
return x;
}
int main(){
fin >> n >> m;
for(int i = 1; i <= n; i++){
r[i] = i;
t[i] = i;
}
while(m--){
int op, a, b;
fin >> op >> a >> b;
if(op == 1)
unite(root(a), root(b));
else
if(root(a) == root(b))
fout << "DA\n";
else
fout << "NU\n";
}
return 0;
}