#include <bits/stdc++.h>
using namespace std;
const int MAX = 500020;
const long long MOD = (int)1e9 + 7;
const int INF = 1e9;
const long long LLINF = 0x3f3f3f3f3f3f3f3f;
const long double EPS = 1e-7;
long long fexp(long long b, long long e) {
  if (e == 0) return 1LL;
  long long res = fexp(b, e / 2);
  res = (res * res) % MOD;
  if (e % 2) res = (res * b) % MOD;
  return res;
}
long long g(long long n) { return fexp(2, n - 1); }
long long mobius(long long n) {
  int fact = 0;
  for (long long i = 2; i * i <= n; i++) {
    if (n % i == 0) {
      int cnt = 0;
      while (n % i == 0) {
        n /= i;
        cnt++;
      }
      fact++;
      if (cnt >= 2) return 0;
    }
  }
  if (n > 1) fact++;
  return fact % 2 ? -1 : 1;
}
long long f(long long n) {
  long long val = 0;
  for (long long i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      long long d = i;
      val = (val + mobius(d) * g(n / d)) % MOD;
      if (n / i != i) {
        d = n / i;
        val = (val + mobius(d) * g(n / d)) % MOD;
      }
    }
  }
  return (val + MOD) % MOD;
}
int32_t main() {
  long long x, y;
  cin >> x >> y;
  if (y % x) {
    cout << 0 << '\n';
  } else {
    cout << f(y / x) << '\n';
  }
  return 0;
}
