#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream ki("disjoint.out");
int gyoker(int csucs, 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, int* apa, 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, int* apa)
{
if (gyoker(i, apa) == gyoker(j, apa)) return true;
return false;
}
int main()
{
int n, k;
f >> n >> k;
int* apa = new int[n + 1];
int* meret = new int[n + 1];
for (int i = 1; i <= n; i++)
{
apa[i] = i;
meret[i] = 1;
}
for (int i = 0; i < k; i++)
{
//string muvelet;
int muvelet;
int kezdp, vegp;
f >> 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;
}