#include <iostream>
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std;
ifstream be("disjoint.in");
ofstream ki("disjoint.out");
int gyoker(int csucs, vector<int>& apa){
int gyoker = csucs;
while (gyoker != apa[gyoker])
{
gyoker = apa[gyoker];
}
while (csucs != gyoker)
{
int regi_apa = apa[csucs];
apa[csucs] = gyoker;
csucs = regi_apa;
}
return gyoker;
}
void hozzaad(int i, int j, vector<int>& apa, vector<int>& meret)
{
int i_gyokere = gyoker(i, apa);
int j_gyokere = gyoker(j, apa);
if (meret[i_gyokere] > meret[j_gyokere])
{
apa[j_gyokere] = i_gyokere;
meret[j_gyokere] += meret[i_gyokere];
}
else
{
apa[i_gyokere] = j_gyokere;
meret[i_gyokere] += meret[j_gyokere];
}
}
bool elerheto(int i, int j, vector<int>& apa)
{
if (gyoker(i, apa) == gyoker(j, apa)) return true;
return false;
}
int main()
{
int n, k;
be >> n >> k;
vector<int> apa(n + 1);
vector<int> meret(n + 1, 1);
for (int i = 1; i <= n; i++){
apa[i] = i;
}
for (int i = 0; i < k; i++)
{
//string muvelet;
int muvelet;
int kezdp, vegp;
be >> muvelet >> kezdp >> vegp;
/*if (muvelet == "ELERHETO")
{
if (elerheto(kezdp, vegp, apa)) ki << "1" << endl;
else ki << "0" << endl;
}
else if (muvelet == "HOZZAAD")
{
if (!elerheto(kezdp, vegp, apa)) hozzaad(kezdp, vegp, apa, meret);
}*/
if (muvelet == 2)
{
if (elerheto(kezdp, vegp, apa)) ki << "DA" << endl;
else ki << "NU" << endl;
}
else if (muvelet == 1)
{
if (!elerheto(kezdp, vegp, apa)) hozzaad(kezdp, vegp, apa, meret);
}
}
return 0;
}