#include using namespace std; #include using namespace atcoder; using mint=atcoder::modint; #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #define int long long #define rep(i,n) for(int i=0;i<(n);i++) #define rng(i,l,r) for(int i=(l);i<(r);i++) #define rrep(i,n) for(int i=(n)-1;i>=0;i--) #define rrng(i,l,r) for(int i=(r)-1;i>=(l);i--) #define fi first #define se second #define all(x) (x).begin(),(x).end() struct fast_io{fast_io(){std::cin.tie(nullptr)->sync_with_stdio(false);}}_; signed main(){ int N,P;cin>>N>>P; fenwick_tree sm(N+2); modint::set_mod(P); vector dp(N+1); vector> trans(N+1); for(int i=1;i<=N;i++){ for(int j=i;j<=N;j+=i){ trans[j].push_back(i); } if(i>2){ mint t=sm.sum(0,i+1); t=t/i+1; t*=i/mint(i-trans[i].size()); dp[i]=t; } mint t=dp[i]; for(auto&&l:trans[i]){ sm.add(i+1,t); sm.add(min(N+1,i+l),-t); } } // for(int i=1;i<=N;i++){ // cout<