#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
const int mod = 1e9 + 7;
int n, m, t, q;
vector<int> G;
long long dp[N];
long long quickpow(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return ans % mod;
}
int main() {
  int x, y;
  scanf("%d%d", &x, &y);
  if (y % x != 0) {
    printf("0\n");
    return 0;
  }
  int up = sqrt(y);
  for (int i = (1); i <= (up); i++) {
    if ((y % i) == 0) {
      if ((i % x) == 0) G.push_back(i);
      if ((y / i) % x == 0) {
        if (y / i != i) G.push_back(y / i);
      }
    }
  }
  sort(G.begin(), G.end());
  int sz = G.size();
  for (int i = (sz - 1); i >= (0); i--) {
    dp[i] = quickpow(2, y / G[i] - 1);
    for (int j = (i + 1); j <= (sz - 1); j++) {
      if ((G[j] % G[i]) == 0) {
        dp[i] = (dp[i] + mod - dp[j]) % mod;
      }
    }
  }
  printf("%lld\n", dp[0]);
  return 0;
}
