#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream be("disjoint.in");
ofstream ki("disjoint.out");
int findset(int i,vector<int>&parent)
{
if(i==parent[i])
return i;
else{
int root=findset(parent[i],parent);
parent[i]=root;
return root;
}
}
void unionset(int x,int y,vector<int>&parent,vector<int>&rank)
{
int rx=findset(x,parent);
int ry=findset(y,parent);
if(rank[rx]<rank[ry])
{
parent[rx]=ry;
}
else if(rank[rx]==rank[ry])
{
rank[ry]++;
parent[rx]=ry;
}
else parent[ry]=rx;
}
int main()
{
int n,m;
be>>n>>m;
vector<int>parent(n+1);
vector<int>rank(n+1,0);
for(int i=1;i<=n;i++)
parent[i]=i;
for(int i=0;i<m;i++)
{
int x;
be>>x;
int a,b;
be>>a>>b;
if(x==1)
{
unionset(findset(a,parent),findset(b,parent),parent,rank);
}
else
{
if(findset(a,parent)==findset(b,parent))
ki<<"DA"<<endl;
else ki<<"NU"<<endl;
}
}
return 0;
}