#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int Find(int x, vector<int> &dad) {
int ans, aux;
ans = x;
while (ans != dad[ans])
ans = dad[ans];
while (x != dad[x]) {
aux = dad[x];
dad[x] = ans;
x = aux;
}
return ans;
}
void Union(int x, int y, vector<int> &dad, vector<int> &rang) {
int root_x = Find(x, dad);
int root_y = Find(y, dad);
if (rang[root_x] > rang[root_y]) {
dad[root_y] = root_x;
rang[root_x] += rang[root_y];
} else {
dad[root_x] = root_y;
rang[root_y] += rang[root_x];
}
}
int main() {
int n, m, cod, x, y;
f >> n >> m;
vector<int> dad(n + 1);
vector<int> rang(n + 1, 0);
for (int i = 1; i <= n; ++i) {
dad[i] = i;
}
for (int i = 0; i < m; ++i) {
f >> cod >> x >> y;
if (cod == 1) Union(x, y, dad, rang);
else {
if (Find(x, dad) == Find(y, dad))
g << "DA\n";
else g << "NU\n";
}
}
f.close();
g.close();
return 0;
}