-- yukicoder My Practice -- author: Leonardone @ NEETSDKASU main = print . solve . map read . words =<< getLine solve (n:m:_) = g r df 0 where f = take n fib r = reverse f (fn,_) = last f df = fn - m g _ 0 p = p g [] _ _ = (-1) g ((x,s):xs) d p | s < d = (-1) | x > d = g xs d p | otherwise = case ((g xs d p), (g xs (d - x) (p + 1))) of ((-1), b ) -> b (a, (-1)) -> a (a, b ) -> minimum [a, b] fib = [(1,1), (1,2)] ++ [(a + b, a + b + s) | x <- [0..], let ((a,_):(b,s):_) = drop x fib]