import math,string,itertools,fractions,heapq,collections,re,array,bisect,sys,random,time,queue,copy
sys.setrecursionlimit(10**7)
inf=10**20
mod=10**9+7
dd=[(-1,0),(0,1),(1,0),(0,-1)]
ddn=[(-1,0),(-1,1),(0,1),(1,1),(1,0),(1,-1),(0,-1),(-1,-1)]
def LI(): return [int(x) for x in sys.stdin.readline().split()]
def LI_(): return [int(x)-1 for x in sys.stdin.readline().split()]
def I(): return int(sys.stdin.readline())
def LS(): return sys.stdin.readline().split()
def S(): return input()
par=[0]*100010
for i in range(100010):
par[i]=i
def root(x):
if par[x]==x:
return x
else:
par[x]=root(par[x])
return par[x]
def same(x,y):
return root(x)==root(y)
def unite(x,y):
x=root(x)
y=root(y)
if x==y:
return
par[x]=y
def main():
n,q=LI()
ans=[]
for _ in range(q):
a,b,c=LI()
if a==0:
unite(b,c)
else:
if same(b,c):
ans.append('Yes')
else:
ans.append('No')
for x in ans:
print(x)
main()
# print(main())