#include<bits/stdc++.h>
using namespace std;
long long ch,mo;
int dep;
long long ans[1000],s[1000];
int gcd(long long a,long long b)
{
return b==0?a:gcd(b,a%b);
}
void outp()
{
if(ans[dep]>s[dep])
{
for(int i=1;i<=dep;i++) ans[i]=s[i];
}
}
void dfs(long long zi,long long mu,int d)
{
long long a,b,w;
if(d==dep)
{
s[d]=mu;
if((zi==1)&&s[d]>s[d-1]) outp();
return;
}
for(int i=max(s[d-1]+1,mu/zi+1);i<(dep-d+1)*mu/zi;i++)//此步骤着重理解,
{ // 由上一步和dep深度决定i的取值范围
b=mu*i/gcd(mu,i);
a=b*zi/mu-b/i;
w=gcd(a,b);
a/=w;b/=w;
s[d]=i;
dfs(a,b,d+1);
}
}
int main(){
scanf("%lld%lld",&ch,&mo);
int i=gcd(ch,mo);
ch/=i;
mo/=i;
for(dep=2;;dep++)
{
ans[1]=0;
s[0]=0;
ans[dep]=200000000;
dfs(ch,mo,1);
if(ans[1]!=0) break;
}
for(int j=1;j<=dep;j++)
{
printf("%d ",ans[j]);
}
return 0;
}