#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
long long fastexp(long long a, long long x, long long m) {
  if (x < 0 || a == 0) return 0;
  long long ans = 1;
  while (x) {
    if (x & 1) ans = ans * a % m;
    a = a * a % m;
    x >>= 1;
  }
  return ans;
}
unordered_map<int, long long> dp;
long long f(int x) {
  if (dp.count(x)) return dp[x];
  long long &ret = (dp[x] = fastexp(2, x - 1, MOD));
  for (int i = 1; i * i <= x; i++)
    if (x % i == 0) {
      if (i != 1) ret += 2 * MOD - f(x / i), ret %= MOD;
      if (i * i == x) break;
      ret += 2 * MOD - f(i), ret %= MOD;
    }
  return ret;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int x, y;
  cin >> x >> y;
  if (y % x != 0)
    cout << 0 << '\n';
  else
    cout << f(y / x) << '\n';
  return 0;
}
