#include <iostream>
#include <stdio.h>
#include <stdlib.h>
typedef struct UnionSet
{
int* color;
int size;
}UnionSet;
UnionSet* initSet(int n)
{
UnionSet* u = (UnionSet*)malloc(sizeof(UnionSet));
u->color = (int*)malloc(sizeof(int) * n);
u->size = n;
for (int i = 0; i < u->size; i++)
{
u->color[i] = i;
}
return u;
}
void freeSet(UnionSet* u)
{
if (!u) return;
free(u->color);
free(u);
return;
}
int find(UnionSet* u, int index)
{
return u->color[index];
}
bool merge(UnionSet* u, int a, int b)
{
if (find(u, a) == find(u, b)) return false;
int acolor = find(u, a);
for (int i = 0; i < u->size; i++)
{
if (find(u, i) == acolor)
u->color[i] = u->color[b];
}
return true;
}
int main()
{
int n, m;
scanf("%d%d", &n ,& m);
UnionSet* u = initSet(n);
for (int i = 0; i < m; i++)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
switch (a)
{
case 1:
merge(u, b, c);
break;
case 2:
printf("%s\n", find(u, b) == find(u, c) ? "Yes" : "No");
break;
}
}
freeSet(u);
return 0;
}