#include #include #include using namespace std; using ll=long long; #define all(v) v.begin(),v.end() #define rall(v) v.rbegin(),v.rend() template bool chmax(T &a, T b){if (a < b){a = b;return true;} else return false;} template bool chmin(T &a, T b){if (a > b){a = b;return true;} else return false;} const int MAX=2e6+10; const ll MOD=998244353; vectorfac(MAX),finv(MAX),inv(MAX); void set_fac(){ fac[0]=fac[1]=1; finv[0]=finv[1]=1; inv[1]=1; for (int i=2;i>i&1){ re=(re*k)%MOD; } k=k*k%MOD; } return re; } ll modinv(ll x){ return power(x, MOD-2); } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); set_fac(); ll N,P; cin>>N>>P; ll ans=fac[N]-1; ll K=1,L=1; for(int i=P;i<=N;i+=P){ K*=fac[P-1]; K%=MOD; L*=finv[P-1]*modinv(max(1LL,i-P))%MOD; L%=MOD; ans-=cmb(N,i)*fac[i-1]%MOD*K%MOD*L%MOD; ans%=MOD; if(ans<0)ans+=MOD; } cout<