#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 10, INF = 0x3f3f3f3f;

int n, m;
int f[N];//f[i]表示跳到i号石板上所需的最小次数

int main()
{
    cin >> n >> m;
    memset(f, 0x3f, sizeof f);
    f[n] = 0;
    for (int i = n; i <= m; i ++)
    {        
        if (f[i] == INF) continue;//可写可不写
        for (int j = 2; j * j <= i; j ++)
            if (i % j == 0)
            {
                if (i + j <= m) f[i + j] = min(f[i + j], f[i] + 1);
                if (i + i / j <= m) f[i + i/j] = min(f[i + i/j], f[i] + 1);
            }
    }

    if (f[m] == INF) f[m] = -1;
    cout << f[m] << endl;

    return 0;
}