#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
class unionfind
{
private:
vector<int> p,siz;
public:
unionfind(int n)
{
siz.resize(n+1,1);
p.resize(n+1);
for(int i=1;i<=n;i++) p[i]=i;
}
int sef(int x)
{
if(x==p[x]) return x;
p[x]=sef(p[x]);
return p[x];
}
void unite(int x,int y)
{
x=sef(x);
y=sef(y);
if(x==y) return;
if(siz[x]<siz[y]) swap(x,y);
siz[x]+=siz[y];
p[y]=x;
return;
}
bool samecomp(int x,int y) {return (sef(x)==sef(y));}
};
int main()
{
int n,m;
fin>>n>>m;
unionfind dsu(n);
while(m--)
{
int t,x,y;
fin>>t>>x>>y;
if(t==1)
{
dsu.unite(x,y);
}
else
{
if(dsu.samecomp(x,y)) fout<<"DA"<<'\n';
else fout<<"NU"<<'\n';
}
}
return 0;
}