#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int n; long long int m; map, int> mp[82]; inline int dfs(int c,long long int a, long long int b){ if (clock() / (double)(CLOCKS_PER_SEC) > 1.8){ return -1; } if (b > m){ return -1; } if (c == n){ if (b == m){ return 0; } return -1; } if (mp[c].count(make_pair(a, b))){ return mp[c][make_pair(a, b)]; } int ans=dfs(c + 1, b, a + b); int ans2 = dfs(c + 1, b, a + b - 1LL); if (ans2 != -1){ if (ans == -1 || ans > ans2){ ans = ans2+1; } } mp[c][make_pair(a, b)] = ans; return mp[c][make_pair(a, b)]; } int main(){ scanf("%d", &n); scanf("%lld", &m); int ans=dfs(2, 1, 1); printf("%d\n", ans); return 0; }