// C #ifndef _GLIBCXX_NO_ASSERT #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __cplusplus >= 201103L #include #include #include //#include #include #include #include #include #include #endif // C++ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __cplusplus >= 201103L #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif #include using namespace std; using namespace atcoder; template using min_priority_queue = priority_queue, greater>; typedef long long ll; typedef pair P; // using mint = modint1000000007; using mint = modint998244353; mint op(mint a, mint b) { return a + b; } mint e() { return 0; } int main() { ll n, k; cin >> n >> k; segtree seg(n + 1); seg.set(0, 1); for (int i = 1; i <= n; i++) { int r = i - k; if (r < 0) continue; seg.set(i, seg.prod(0, r + 1)); } mint ans = seg.prod(0, n + 1); cout << ans.val() << endl; return 0; }