#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int M, N;
int set_find(vector<int> &tati, int nod) {
if(tati[nod] == 0) return nod;
tati[nod] = set_find(tati, tati[nod]);
return tati[nod];
}
void set_union(vector<int> &tati, vector<int> &inaltime, int u, int v) {
int a = set_find(tati, u);
int b = set_find(tati, v);
if(a != b) {
if(inaltime[a] > inaltime[b]) {
tati[b] = a;
} else if (inaltime[a] < inaltime[b]) {
tati[a] = b;
} else {
inaltime[b] += 1;
tati[a] = b;
}
}
}
int main() {
fin >> N >> M;
vector<int> tati(N+1, 0);
vector<int> inaltime(N+1, 0);
for (int i = 0; i < M; i++) {
int op, x, y;
fin >> op >> x >> y;
if(op == 1) {
set_union(inaltime, tati, x, y);
} else if (op == 2) {
if(set_find(tati, x) == set_find(tati, y)) {
fout << "DA\n";
} else {
fout <<"NU\n";
}
}
}
}