#include using namespace std; #define int long long #define MOD 1000000007 int pow_mod(int n, int m){ int ans = 1; while(m > 0){ if(m & 1) ans = (ans * n) % MOD; n = (n * n) % MOD; m >>= 1; } return ans; } int kai[1000010]; void init(){ kai[0] = 1; for(int i = 1;i < 1000010;i++){ kai[i] = (kai[i-1] * i) % MOD; } return; } int combi(int n, int r){ return ((kai[n] * pow_mod(kai[r], MOD-2) % MOD) * pow_mod(kai[n-r], MOD-2)) % MOD; } int so[1000010] = {}; int n, k; vector vec; int dfs(int i, int num, int cnt){ if(i == vec.size()){ if(cnt == 0) return 0; if(cnt % 2 == 1) return combi(n/num, k/num); else return -combi(n/num, k/num); } int ans1 = dfs(i+1, num, cnt); int ans2 = dfs(i+1, num*vec[i], cnt+1); int ans = (MOD*2ll + ans1 + ans2) % MOD; return ans; } signed main(){ cin >> n >> k; init(); for(int i = 2;i <= n;i++){ if(so[i] == 0){ for(int j = i*2;j < n;j+=i){ so[j] = 1; } } } int ans = 0; for(int i = 2;i <= n;i++){ if(so[i] == 0 && n % i == 0 && k % i == 0){ vec.push_back(i); } } cout << dfs(0, 1, 0) << endl; return 0; }