# 参考URL https://note.nkmk.me/python-union-find/

class UnionFind():

    # 各要素の親要素の番号を格納するリスト

    # 要素が根（ルート）の場合は-(そのグループの要素数)を格納する

    def __init__(self, n):

        self.n = n

        self.parents = [-1] * n



    # 要素xが属するグループの根を返す

    def find(self, x):

        if self.parents[x] < 0:

            return x

        else:

            self.parents[x] = self.find(self.parents[x])

            return self.parents[x]



    # 要素xが属するグループと要素yが属するグループとを併合する

    def union(self, x, y):

        x = self.find(x)

        y = self.find(y)



        if x == y:

            return



        if self.parents[x] > self.parents[y]:

            x, y = y, x



        self.parents[x] += self.parents[y]

        self.parents[y] = x



    # 要素x, yが同じグループに属するかどうかを返す

    def same(self, x, y):

        return self.find(x) == self.find(y)



def main():

    from sys import stdin

    def input():

        return stdin.readline().strip()



    n, q = list(map(int, input().split()))



    uf = UnionFind(n)



    ans = []

    for _ in range(q):

        t, u, v = list(map(int, input().split()))

        if t == 0:

            uf.union(u, v)

        else:

            if uf.same(u, v):

                ans.append(1)

            else:

                ans.append(0)

    

    for i in ans:

        print(i)



main()
# Reference: https://note.nkmk.me/python-union-find/

class UnionFind:

    # 各要素の親要素の番号を格納するリスト

    # 要素が根（ルート）の場合は-(そのグループの要素数)を格納する

    def __init__(self, n):

        self.n = n

        self.parents = [-1] * n



    # 要素xが属するグループの根を返す

    def find(self, x):

        history = []

        while self.parents[x] >= 0:

            history.append(x)

            x = self.parents[x]

        for node in history:

            self.parents[node] = x

        return x



    # 要素xが属するグループと要素yが属するグループとを併合する

    def union(self, x, y):

        x = self.find(x)

        y = self.find(y)

        if x == y:

            return

        if self.parents[x] > self.parents[y]:

            x, y = y, x

        self.parents[x] += self.parents[y]

        self.parents[y] = x



    # 要素x, yが同じグループに属するかどうかを返す

    def same(self, x, y):

        return self.find(x) == self.find(y)



def main():

    from sys import stdin

    input = stdin.buffer.readline

 

    n, q = list(map(int, input().split()))

 

    uf = UnionFind(n)

 

    ans = []

    for _ in range(q):

        t, u, v = list(map(int, input().split()))

        if t == 0:

            uf.union(u, v)

        else:

            if uf.same(u, v):

                ans.append(1)

            else:

                ans.append(0)

    

    for i in ans:

        print(i)

 

main()
# 参考URL https://note.nkmk.me/python-union-find/
class UnionFind:
    # 各要素の親要素の番号を格納するリスト
    # 要素が根（ルート）の場合は-(そのグループの要素数)を格納する
    def __init__(self, n):
        self.n = n
        self.parents = [-1] * n

    # 要素xが属するグループの根を返す
    def find(self, x):
        if self.parents[x] < 0:
            return x
        else:
            self.parents[x] = self.find(self.parents[x])
            return self.parents[x]

    # 要素xが属するグループと要素yが属するグループとを併合する
    def union(self, x, y):
        x = self.find(x)
        y = self.find(y)
        if x == y:
            return
        if self.parents[x] > self.parents[y]:
            x, y = y, x
        self.parents[x] += self.parents[y]
        self.parents[y] = x

    # 要素x, yが同じグループに属するかどうかを返す
    def same(self, x, y):
        return self.find(x) == self.find(y)


def main():
    from sys import stdin

    def input():
        return stdin.readline().strip()

    n, q = list(map(int, input().split()))
    uf = UnionFind(n)
    ans = []
    for _ in range(q):
        t, u, v = list(map(int, input().split()))
        if t == 0:
            uf.union(u, v)
        else:
            if uf.same(u, v):
                ans.append(1)
            else:
                ans.append(0)
    for i in ans:
        print(i)


main()

# Reference: https://note.nkmk.me/python-union-find/
class UnionFind:
    # 各要素の親要素の番号を格納するリスト
    # 要素が根（ルート）の場合は-(そのグループの要素数)を格納する
    def __init__(self, n):
        self.n = n
        self.parents = [-1] * n

    # 要素xが属するグループの根を返す
    def find(self, x):
        history = []
        while self.parents[x] >= 0:
            history.append(x)
            x = self.parents[x]
        for node in history:
            self.parents[node] = x
        return x

    # 要素xが属するグループと要素yが属するグループとを併合する
    def union(self, x, y):
        x = self.find(x)
        y = self.find(y)
        if x == y:
            return
        if self.parents[x] > self.parents[y]:
            x, y = y, x
        self.parents[x] += self.parents[y]
        self.parents[y] = x

    # 要素x, yが同じグループに属するかどうかを返す
    def same(self, x, y):
        return self.find(x) == self.find(y)


def main():
    from sys import stdin

    input = stdin.buffer.readline
    n, q = list(map(int, input().split()))
    uf = UnionFind(n)
    ans = []
    for _ in range(q):
        t, u, v = list(map(int, input().split()))
        if t == 0:
            uf.union(u, v)
        else:
            if uf.same(u, v):
                ans.append(1)
            else:
                ans.append(0)
    for i in ans:
        print(i)


main()

-# 参考URL https://note.nkmk.me/python-union-find/ +# Reference: https://note.nkmk.me/python-union-find/ -        if self.parents[x] < 0: -            return x -        else: -            self.parents[x] = self.find(self.parents[x]) -            return self.parents[x] +        history = [] +        while self.parents[x] >= 0: +            history.append(x) +            x = self.parents[x] +        for node in history: +            self.parents[node] = x +        return x -    def input(): -        return stdin.readline().strip() - +    input = stdin.buffer.readline