#include using namespace std; using ll = long long; template struct modint { public: modint (long long _v = 0) : v(_v % MOD) { if (v < 0) v += MOD; } long long val() const { return v; } modint operator - () const { return modint(-v); } modint operator + (const modint &r) { return modint(*this) += r; } modint operator - (const modint &r) { return modint(*this) -= r; } modint operator * (const modint &r) { return modint(*this) *= r; } modint operator / (const modint &r) { return modint(*this) /= r; } modint &operator += (const modint &r) { if ((v += r.v) >= MOD) v -= MOD; return *this; } modint &operator -= (const modint &r) { if ((v += MOD - r.v) >= MOD) v -= MOD; return *this; } modint &operator *= (const modint &r) { v = v * r.v % MOD; return *this; } modint &operator /= (const modint &r) { v = v * r.inv() % MOD; return *this; } modint inv() const { long long a = v, b = MOD, p = 1, q = 0; while (b) { long long t = a / b; a -= t * b; swap(a, b); p -= t * q; swap(p, q); } p %= MOD; if (p < 0) p += MOD; return p; } modint pow(long long n) const { assert(0 <= n); modint x = *this, res = 1; while (n) { if (n & 1) res *= x; x *= x; n >>= 1; } return res; } private: long long v; }; using mint = modint<998244353>; int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); int N, K; cin >> N >> K; vector dp(N + 1); dp[0] = 1; for (int i = 1; i <= N; i++) { dp[i] = dp[i - 1]; if (i < K) continue; dp[i] += dp[i - K]; } cout << dp[N].val() << '\n'; }