import Data.List
import qualified Data.Set as S

type Element = Int
type SetElement =S.Set Element
type Family = S.Set SetElement
type Command = [Int]


main = do
    contents <- getContents
    let ([n, q] : queries) = map parse (lines contents)
    let family = S.fromList $ (map S.singleton $ take n [0::Int ..])
    let families = init $ scanl (\f [c,x,y] -> if c == 1 then f else unite x y f) family queries
    let output = filter (>=0) (map (\(f, [c,x,y]) -> if c == 0 then -1 else if same x y f then 1 else 0) $ zip families queries)
    mapM_ print output


parse :: String -> Command
parse = map read . words


pivot :: Element -> Family -> (SetElement, Family)
pivot x family = (S.elemAt 0 $ S.fromList sxs, S.fromList rxs)
    where
    (sxs, rxs) = S.partition (x `elem`) family


same :: Element -> Element -> Family -> Bool
same x y family = sx == sy
    where
    (sx, rxs) = pivot x family
    (sy, rys) = pivot y family


unite :: Element -> Element -> Family -> Family
unite x y family = if same x y family then family else S.insert sxy rxys
    where
    (sx, rxs) = pivot x family
    (sy, rys) = pivot y family
    sxy = S.union sx sy
    rxys = S.intersection rxs rys