#include <bits/stdc++.h>
using namespace std;
long long int x, y;
long long int gcd(long long int a, long long int b) {
  if (a == 0) {
    x = 0, y = 1;
    return b;
  }
  long long int gc = gcd(b % a, a);
  long long int temp;
  temp = x;
  x = y - (b / a) * temp;
  y = temp;
  return gc;
}
long long int pow(long long int a, long long int x, long long int m) {
  long long int ans = 1, k = 1;
  while (k <= x) {
    if (x % k) ans = ((ans * a) % m);
    k <<= 1;
    a *= a;
    a %= m;
  }
  return ans;
}
vector<long long int> fac;
priority_queue<pair<long long int, long long int>,
               vector<pair<long long int, long long int> > >
    temp;
int main() {
  ios::sync_with_stdio(false);
  cout.tie(0);
  cin.tie(0);
  long long int x, y;
  cin >> x >> y;
  long long int i;
  long long int k = sqrt(x);
  for (i = 1; i <= k; i++) {
    if (x % i == 0) {
      fac.push_back(i);
      fac.push_back(x / i);
    }
  }
  if (k * k == x) fac.pop_back();
  sort(fac.begin(), fac.end());
  long long int ans = 0;
  long long int cur = 1;
  for (i = 0; i < fac.size(); i++) {
    k = y / fac[i];
    k *= fac[i];
    temp.push({k, fac[i]});
  }
  while (!temp.empty()) {
    if (temp.top().first % cur == 0) {
      ans += ((y - temp.top().first) / cur);
      cur = max(cur, temp.top().second);
      y = temp.top().first;
    }
    temp.pop();
  }
  ans += y / cur;
  cout << ans << endl;
}
