#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int parinte[100005],N,M,op,x,y,rang[100005];
int FindRoot(int x){
if(parinte[x]==x){
return x;
}
else return parinte[x]=FindRoot(parinte[x]);
}
void Union(int x, int y){
x=FindRoot(x);
y=FindRoot(y);
if(x==y) return;
if(rang[x]<rang[y]) swap(x,y);
if(rang[x]==rang[y]) rang[x]++;
parinte[y]=x;
}
bool Find(int x, int y){
if(FindRoot(x)==FindRoot(y)) return 1;
return 0;
}
int main()
{
fin>>N>>M;
for(int i=1;i<=N;i++){
parinte[i]=i;
rang[i]=1;
}
for(int i=1;i<=M;i++){
fin>>op>>x>>y;
if(op==1){
Union(x,y);
}
else{
bool ok=Find(x,y);
if(ok) fout<<"DA\n";
else fout<<"NU\n";
}
}
return 0;
}