#include using namespace std; typedef long long ll; const ll MOD = 1e9 + 7; const int MAXN = 1000005; ll fac[MAXN], inv[MAXN], dp[MAXN]; ll pw(ll a, ll b) { ll res = 1; while (b) { if (b & 1) res = res * a % MOD; a = a * a % MOD; b >>= 1; } return res; } ll C(ll n, ll k) { if (k < 0 || k > n) return 0; return fac[n] * inv[k] % MOD * inv[n - k] % MOD; } void init() { fac[0] = 1; for (int i = 1; i < MAXN; i++) fac[i] = fac[i - 1] * i % MOD; inv[MAXN - 1] = pw(fac[MAXN - 1], MOD - 2); for (int i = MAXN - 2; i >= 0; i--) inv[i] = inv[i + 1] * (i + 1) % MOD; } int main() { ios::sync_with_stdio(0); cin.tie(0); init(); int N, K; cin >> N >> K; for (int d = 1; d < N; d++) { if (N % d == 0) { int L = N / d; if (K % L == 0) { dp[d] = C(d, K / L); } } } ll ans = 0; for (int d = 1; d < N; d++) { if (dp[d] == 0) continue; ans = (ans + dp[d]) % MOD; for (int e = d * 2; e <= N; e += d) { if (N % e == 0) { dp[e] = (dp[e] - dp[d] + MOD) % MOD; } } } cout << ans << "\n"; return 0; }