#include #include #include using namespace std; using mint=atcoder::modint1000000007; long gcdl(long a,long b){return b?gcdl(b,a%b):a;} int gcd(int a,int b){return b?gcd(b,a%b):a;} int N,K; main() { cin>>N>>K; if(K==1) { cout<<(mint(2).pow(N)-1).val()<mp,nxt; mp[K]=1; for(int i=0;i>_A; int A=gcdl(_A,K); for(const pairp:mp) { int t=gcd(A,p.first); nxt[p.first/t]+=p.second; nxt[p.first]+=p.second; } mp.swap(nxt); } cout<