module Main; // import BinaryHeap; // import BoolArray; // import CPLib.Arithmetic; // import CPLib.Bipartite; // import CPLib.Bits; // import CPLib.Convolution; // import CPLib.DSegtree; // import CPLib.Graph; import CPLib.IO; // import CPLib.LDSegtree; // import CPLib.LSegtree; // import CPLib.MaxFlow; // import CPLib.Memoize; // import CPLib.MinCostFlow; // import CPLib.Misc; // import CPLib.Monoid; // import CPLib.Segtree; // import CPLib.String; // import CPLib.Trait; // import CPLib.TwoSat; // import CPLib.UnionFind; // import CPLib.ZP; // import HashMap; // import HashSet; main : IO () = ( let iN = *read_i; let iM = *read_i; let fib = range(2, iN).fold([1,1], |_, fib| let x = fib.@(fib.@size-1); let y = fib.@(fib.@size-2); fib.push_back(x + y) ); if iM > fib.@(iN-1) { println("-1") }; let rest = fib.@(iN-1) - iM; let fib = fib.pop_back.pop_back; let ans = loop((rest, 0, fib), |(rest, cnt, fib)| if rest == 0 { some(cnt).break }; if fib.is_empty { none().break }; let (cnt, rest) = if fib.@(fib.@size-1) <= rest { let cnt = cnt + 1; let rest = rest - fib.@(fib.@size-1); (cnt, rest) } else { (cnt, rest) }; let fib = fib.pop_back; (rest, cnt, fib).continue ); match ans { none() => println("-1"), some(cnt) => cnt.to_string.println };; pure() );