#include #include #include using namespace atcoder; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000 long long get(long long n,long long m,int p,int cnt){ if(n>=m)return 0; long long cur = n; long long t = 0; while(cur!=0){ t += cur / p; cur /= p; } if(t >= cnt)return 0; long long ret; if(cnt==1){ ret = p - 1; for(int i=p-1;i>=n+1;i--){ ret *= inv_mod(i,m); ret %= m; } } else{ ret = 1LL; for(int i=1;i<=n;i++){ ret *= i; ret %= m; } } return ret; } int main(){ int _t; cin>>_t; rep(_,_t){ int n,m; cin>>n>>m; int mm = m; if(n>=m){ cout<<0<> ps; for(int i=2;i*i<=m;i++){ if(m%i==0){ ps.emplace_back(i,0); while(m%i==0){ m/=i; ps.back().second++; } } } if(m!=1)ps.emplace_back(m,1); m = mm; vector x,y; rep(i,ps.size()){ long long temp = 1LL; rep(j,ps[i].second)temp *= ps[i].first; x.push_back(get(n,temp,ps[i].first,ps[i].second)); y.push_back(temp); //cout<