#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin;
ofstream fout;
int task, number_of_tasks, n, i, j, k;
vector <int> parent (100001);
void create_disjoint(){
for (i=1; i<=n; i++)
parent[i] = i;
}
int find_element(int element){
if (parent[element] == element)
return element;
else {
parent[element] = find_element(parent[element]);
return parent[element];
}
}
void union_of_partition (int left, int right){
parent[find_element(left)] = find_element(right);
}
int main (void){
fin.open("disjoint.in");
fout.open("disjoint.out");
fin>>n>>number_of_tasks;
create_disjoint();
for (i=1; i<=number_of_tasks; i++){
fin>>task;
switch (task)
{
case 1:
fin>>j>>k;
union_of_partition(j , k);
break;
case 2:
fin>>j>>k;
if (find_element(j) == find_element(k)) fout<<"DA\n";
else fout<<"NU\n";
break;
}
}
fin.close();
fout.close();
return 0;
}