#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 5, MOD = 1e9 + 7;
map<pair<int, int>, bool> m;
int main() {
  int a, b;
  scanf("%d %d", &a, &b);
  int cnt = 0;
  queue<pair<pair<int, int>, int> > q;
  q.push({{a, b}, 0});
  while (!q.empty()) {
    auto a = q.front();
    q.pop();
    if (m[{a.first.first, a.first.second}]) continue;
    m[{a.first.first, a.first.second}] = 1;
    if (a.first.first == a.first.second) return cout << a.second, 0;
    if (a.first.first % 2 == 0 && !m[{a.first.first / 2, a.first.second}])
      q.push({{a.first.first / 2, a.first.second}, a.second + 1});
    if (a.first.first % 3 == 0 && !m[{a.first.first / 3, a.first.second}])
      q.push({{a.first.first / 3, a.first.second}, a.second + 1});
    if (a.first.first % 5 == 0 && !m[{a.first.first / 5, a.first.second}])
      q.push({{a.first.first / 5, a.first.second}, a.second + 1});
    if (a.first.second % 2 == 0 && !m[{a.first.first, a.first.second / 2}])
      q.push({{a.first.first, a.first.second / 2}, a.second + 1});
    if (a.first.second % 3 == 0 && !m[{a.first.first, a.first.second / 3}])
      q.push({{a.first.first, a.first.second / 3}, a.second + 1});
    if (a.first.second % 5 == 0 && !m[{a.first.first, a.first.second / 5}])
      q.push({{a.first.first, a.first.second / 5}, a.second + 1});
  }
  printf("-1");
  return 0;
}
