#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
#define nmax 100005
int n,rang[nmax],mul[nmax];
int Find(int x)
{
int R,y;
for(R=x; R!=mul[R]; R=mul[R]);
//R este adresa multimii care contine elementul x
for(;mul[x]!=x;)
{
y=mul[x];
mul[x]=R;
x=y;
}
return R;
}
void Unite(int x, int y)
{
if(rang[x]>rang[y])
mul[y]=x;
else
mul[x]=y;
if(rang[x]==rang[y])
rang[y]++;
}
int main()
{
int i,t,x,y,m;
cin>>n>>m;
for(i=1; i<=n; i++)
{
rang[i]=1;
mul[i]=i;
}
for(i=1; i<=m; i++)
{
cin>>t>>x>>y;
if(t==2)
{
if(Find(x)==Find(y))
cout<<"DA";
else
cout<<"NU";
cout<<endl;
}
else
{
if (Find(x) == Find(y))
{
return 0;
}
Unite(Find(x),Find(y));
}
}
return 0;
}