#pragma GCC optimisation("O3")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize("Ofast,unroll-loops")
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
#define NUM1 1000000007LL
#define all(a) a.begin(), a.end()
#define beg(a) a.begin(), a.begin()
#define sq(a) ((a)*(a))
#define NUM2 998244353LL
#define MOD NUM1
#define LMOD 1000000006LL
#define fi first
#define se second
typedef long double ld;
const ll MAX = 500;
const ll MAX2 = MAX;
const ll large = 1e18;
ld eps = 1e-14l;
ll mod;
ll binpow(ll a, ll n){
if(n == 0) return 1;
ll v = binpow(a, n/2);
v = (v*v)%mod;
if(n%2 == 1) return (a*v)%mod;
else return v;
}
void update(vector<ll>& seg, ll tl, ll tr, ll v, ll pos, ll nval)
{
if(tl == tr){
seg[v] = binpow(pos, nval);
return;
}
ll tm = (tl + tr)/2;
if(pos > tm){
update(seg, tm + 1, tr, 2*v + 2, pos, nval);
}
else{
update(seg, tl, tm, 2*v + 1, pos, nval);
}
seg[v] = (seg[2*v + 1]*seg[2*v + 2])%mod;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
ll n;
cin >> n >> mod;
vector<ll> maxp(n + 1);
for(ll i = 2; i <= n; i++){
if(maxp[i] == 0){
for(ll j = i; j <= n; j += i) maxp[j] = i;
}
}
vector<ll> freq(n + 1), seg(4*n + 4, 1);
vector<ll> dp(n + 1);
dp[0] = 1;
for(ll i = 1; i <= n; i++){
ll mult = n - i + 1;
ll hold = mult;
while(hold != 1){
ll p = maxp[hold];
ll c = 0;
while(hold%p == 0){
hold /= p;
c++;
}
freq[p] += c;
update(seg, 0, n, 0, p, freq[p]);
}
ll div = i;
hold = div;
while(hold != 1){
ll p = maxp[hold];
ll c = 0;
while(hold%p == 0){
hold /= p;
c++;
}
freq[p] -= c;
update(seg, 0, n, 0, p, freq[p]);
}
dp[i] = seg[0];
}
for(auto x: dp) cout << x << ' ';
return 0;
}