#include #include using namespace std; int n, p; vector fact[1000005]; bool prime[1000005]; vector G[1000005]; bool used[1000005]; void dfs(int v) { used[v] = true; for(int i = 0; i < G[v].size(); i++){ if(used[G[v][i]]) continue; dfs(G[v][i]); } } int main(void) { cin >> n >> p; for(int i = 2; i <= n; i++){ if(prime[i]) continue; for(int j = 2*i; j <= n; j+=i){ prime[j] = true; fact[j].push_back(i); } } for(int i = 2; i <= n; i++){ for(int j = 0; j < fact[i].size(); j++){ G[i].push_back(fact[i][j]); G[fact[i][j]].push_back(i); } } dfs(p); int ans = 0; for(int i = 1; i <= n; i++) if(used[i]) ans++; cout << ans << endl; return 0; }