#include <bits/stdc++.h>
using namespace std;
const int N = 300010;
const int M = 120;
const int C = 10;
const int P = 6;
const int MOD = 1e9 + 7;
int x, y;
vector<int> d, dp;
void add(int &a, int b) {
  a += b;
  if (a >= MOD) a -= b;
}
void substract(int &a, int b) {
  a -= b;
  if (a < 0) a += MOD;
}
void mult(int &a, int b) { a = (1ll * a * b) % MOD; }
int power(int b, int p) {
  int res = 1;
  while (p) {
    if (p & 1) {
      mult(res, b);
    }
    mult(b, b);
    p /= 2;
  }
  return res;
}
void calc(int x, int y) {
  for (int i = 1; 1ll * i * i <= y; i++) {
    if (y % i == 0) {
      int d1 = i, d2 = y / i;
      if (d1 % x == 0) d.push_back(d1);
      if (d1 != d2 && d2 % x == 0) d.push_back(d2);
    }
  }
}
int solve(int y) { return power(2, y - 1); }
int main() {
  cin >> x >> y;
  int ans = 0;
  if (y % x == 0) {
    calc(x, y);
    sort(d.begin(), d.end());
    dp.resize(d.size());
    add(ans, solve(y / x));
    for (int i = (int)d.size() - 1; i >= 0; i--) {
      dp[i] = solve(y / d[i]);
      for (int j = i + 1; j < d.size(); j++) {
        if (d[j] % d[i] == 0) substract(dp[i], dp[j]);
      }
    }
    ans = dp[0];
  }
  cout << ans;
  return 0;
}
