#include <bits/stdc++.h>
using namespace std;
#define tw() int t; cin >> t; while (t--)
#define ll long long
#define pb push_back
#define vi vector<int>
#define vc vector<char>
#define vs vector<string>
#define pii pair<int, int>
#define vpii vector<pii>
#define mii unordered_map<int, int>
#define mci map<char, int>
#define msi map<string, int>
#define si set<int>
#define sc set<char>
#define ss set<string>
#define all(x) x.begin(), x.end()
#define allcmp(x) x.begin(), x.end(), cmp
const int MOD = 1000000007;
vi arr[1000000];
mii map1;
int bfs(int n, int m)
{
queue<int> q;
q.push(map1[n]);
mii dis;
mii visited;
dis[map1[n]] = 0;
while (!q.empty())
{
int x = q.front();
q.pop();
visited[x] = 1;
for (auto u : arr[x])
{
if (visited[u] == 0)
{
q.push(u);
dis[u] += dis[x] + 1;
if (u == map1[m])
return dis[u];
}
}
}
return 0;
}
int32_t main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n1, m1;
cin >> n1 >> m1;
int n = n1, m = m1;
int c = 1;
map1[n] = c;
while (n != 1)
{
int mex = 1;
for (int i = 1; i <= n / 2; i++)
{
if (n % i == 0)
mex = max(mex, i);
}
c++;
map1[mex] = c;
arr[map1[n]].pb(map1[mex]);
arr[map1[mex]].pb(map1[n]);
n = mex;
}
if (!map1[m])
{
c++;
map1[m] = c;
}
while (m != 1)
{
int mex = 1;
for (int i = 1; i <= m / 2; i++)
{
if (m % i == 0)
mex = max(mex, i);
}
if (!map1[mex])
{
c++;
map1[mex] = c;
}
arr[map1[m]].pb(map1[mex]);
arr[map1[mex]].pb(map1[m]);
m = mex;
}
cout<< bfs(n1, m1);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgdHcoKSBpbnQgdDsgICBjaW4gPj4gdDsgIHdoaWxlICh0LS0pCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgdmkgdmVjdG9yPGludD4KI2RlZmluZSB2YyB2ZWN0b3I8Y2hhcj4KI2RlZmluZSB2cyB2ZWN0b3I8c3RyaW5nPgojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIHZwaWkgdmVjdG9yPHBpaT4KI2RlZmluZSBtaWkgdW5vcmRlcmVkX21hcDxpbnQsIGludD4KI2RlZmluZSBtY2kgbWFwPGNoYXIsIGludD4KI2RlZmluZSBtc2kgbWFwPHN0cmluZywgaW50PgojZGVmaW5lIHNpIHNldDxpbnQ+CiNkZWZpbmUgc2Mgc2V0PGNoYXI+CiNkZWZpbmUgc3Mgc2V0PHN0cmluZz4KI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgYWxsY21wKHgpIHguYmVnaW4oKSwgeC5lbmQoKSwgY21wCmNvbnN0IGludCBNT0QgPSAxMDAwMDAwMDA3OwoKdmkgYXJyWzEwMDAwMDBdOwptaWkgbWFwMTsKaW50IGJmcyhpbnQgbiwgaW50IG0pCnsKICAgIHF1ZXVlPGludD4gcTsKICAgIHEucHVzaChtYXAxW25dKTsKICAgIG1paSBkaXM7CiAgICBtaWkgdmlzaXRlZDsKICAgIGRpc1ttYXAxW25dXSA9IDA7CiAgICB3aGlsZSAoIXEuZW1wdHkoKSkKICAgIHsKICAgICAgICBpbnQgeCA9IHEuZnJvbnQoKTsKICAgICAgICBxLnBvcCgpOwogICAgICAgIHZpc2l0ZWRbeF0gPSAxOwogICAgICAgIGZvciAoYXV0byB1IDogYXJyW3hdKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHZpc2l0ZWRbdV0gPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcS5wdXNoKHUpOwogICAgICAgICAgICAgICAgZGlzW3VdICs9IGRpc1t4XSArIDE7CiAgICAgICAgICAgICAgICBpZiAodSA9PSBtYXAxW21dKQogICAgICAgICAgICAgICAgICByZXR1cm4gIGRpc1t1XTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9CmludDMyX3QgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CgogICAgaW50IG4xLCBtMTsKICAgIGNpbiA+PiBuMSA+PiBtMTsKICAgIGludCBuID0gbjEsIG0gPSBtMTsKCiAgICBpbnQgYyA9IDE7CiAgICBtYXAxW25dID0gYzsKICAgIHdoaWxlIChuICE9IDEpCiAgICB7CiAgICAgICAgaW50IG1leCA9IDE7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbiAvIDI7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChuICUgaSA9PSAwKQogICAgICAgICAgICAgICAgbWV4ID0gbWF4KG1leCwgaSk7CiAgICAgICAgfQogICAgICAgIGMrKzsKICAgICAgICBtYXAxW21leF0gPSBjOwoKICAgICAgICBhcnJbbWFwMVtuXV0ucGIobWFwMVttZXhdKTsKICAgICAgICBhcnJbbWFwMVttZXhdXS5wYihtYXAxW25dKTsKICAgICAgICBuID0gbWV4OwogICAgfQoKICAgIGlmICghbWFwMVttXSkKICAgIHsKICAgICAgICBjKys7CiAgICAgICAgbWFwMVttXSA9IGM7CiAgICB9CiAgICB3aGlsZSAobSAhPSAxKQogICAgewogICAgICAgIGludCBtZXggPSAxOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG0gLyAyOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBpZiAobSAlIGkgPT0gMCkKICAgICAgICAgICAgICAgIG1leCA9IG1heChtZXgsIGkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFtYXAxW21leF0pCiAgICAgICAgewogICAgICAgICAgICBjKys7CiAgICAgICAgICAgIG1hcDFbbWV4XSA9IGM7CiAgICAgICAgfQoKICAgICAgICBhcnJbbWFwMVttXV0ucGIobWFwMVttZXhdKTsKICAgICAgICBhcnJbbWFwMVttZXhdXS5wYihtYXAxW21dKTsKICAgICAgICBtID0gbWV4OwogICAgfQoKICAgY291dDw8IGJmcyhuMSwgbTEpOwoKCiAgICByZXR1cm4gMDsKfQ==