#include <fstream>
#include <vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
vector<int> culoare;
vector<int> marime;
int verifyculoare(int x) {
if (x == culoare[x])
return x;
return culoare[x] = verifyculoare(culoare[x]);
}
void reunite(int nod1, int nod2) {
int culoare1 = verifyculoare(nod1);
int culoare2 = verifyculoare(nod2);
if (culoare1 != culoare2) {
if (marime[culoare1] < marime[culoare2])
swap(culoare1, culoare2);
culoare[culoare2] = culoare1;
marime[culoare1] += marime[culoare2];
}
}
void verify(int nod1, int nod2) {
if (verifyculoare(nod1) == verifyculoare(nod2)) {
fout << "DA\n";
} else {
fout << "NU\n";
}
}
int main() {
fin >> n >> m;
culoare.resize(n + 1);
marime.resize(n + 1, 1);
for (int i = 1; i <= n; i++) {
culoare[i] = i;
}
int op, nod1, nod2;
for (int c = 1; c <= m; c++) {
fin >> op >> nod1 >> nod2;
if (op == 1) {
reunite(nod1, nod2);
} else if (op == 2) {
verify(nod1, nod2);
}
}
return 0;
}