#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <sstream>
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define mem(f, x) memset(f,x,sizeof(f))
#define fo(i,a,n) for(int i=(a);i<=(n);++i)
#define fo_(i,a,n) for(int i=(a);i<(n);++i)
#define debug(x) cout<<#x<<":"<<x<<endl;
#define endl '\n'
using namespace std;
template<typename T>
ostream& operator<<(ostream& os,const vector<T>&v){for(int i=0,j=0;i<v.size();i++,j++)if(j>=5){j=0;puts("");}else os<<v[i]<<" ";return os;}
template<typename T>
ostream& operator<<(ostream& os,const set<T>&v){for(auto c:v)os<<c<<" ";return os;}
template<typename T1,typename T2>
ostream& operator<<(ostream& os,const map<T1,T2>&v){for(auto c:v)os<<c.first<<" "<<c.second<<endl;return os;}
template<typename T>inline void rd(T &a) {
char c = getchar(); T x = 0, f = 1; while (!isdigit(c)) {if (c == '-')f = -1; c = getchar();}
while (isdigit(c)) {x = (x << 1) + (x << 3) + c - '0'; c = getchar();} a = f * x;
}
typedef pair<int,int>PII;
typedef pair<long,long>PLL;
typedef long long ll;
typedef unsigned long long ull;
const int N=2e5+10,MOD=998244353;
ll n,m,_;
void solve() {
int n, k;
cin >> n >> k;
vector<int> ans(n + 1);
int sq = 2 * sqrt(n);
vector<vector<int>> dp(2, vector<int>(n + 1)), presum(2, vector<int>(n + 1));
dp[0][0] = 1;
presum[0][0] = 1;
int cur = 1;
for (int j = 0; j < sq; j++) {
cur ^= 1;
for (int i = j+k-1; i <= n; i++) {
int x = i-(j+k-1);
dp[cur][i] = presum[cur ^ 1][x];
presum[cur][i] = (presum[cur][i - x] + dp[cur ^ 1][i]) % MOD;
}
for (int i = 0; i <= n; i++) {
ans[i] = (dp[cur][i] + ans[i]) % MOD;
}
}
for (int i = 1;i <= n; i++) {
cout << ans[i] << " ";
}
cout << "\n";
}
int main(){
solve();
return 0;
}