import Data.List (unfoldr) main :: IO () main = print =<< solve . map (read :: String -> Int) . words <$> getLine solve :: [Int] -> Int solve [m, n] = sum $ unfoldr f (m, n) f :: (Int, Int) -> Maybe (Int, (Int, Int)) f (a, b) | a == 1 && b == 1 = Nothing | (gcd a b) /= 1 = Just (0, (a `div` gcd a b, b `div` gcd a b)) | b == 1 = Just (a - 1, (1, 1)) | a > b = Just (1, (a - b, b)) | otherwise = Just (1, (b, a))