#include <stdio.h>
#include <string.h>

#define size 110000

int a[size][20],mask[20][2],curr[size],used[size],prime[size],qwe[size];
int n,m,i,j,numof,q,masklen,out[size],outlen;

int main()
{
  freopen("irrelevant.in","r",stdin);
  freopen("irrelevant.out","w",stdout);
  scanf("%i %i",&n, &m);
	n--;
	for(i=2;i<size;i++)
		if(!used[i])
		  for(j=i+i;j<size;j+=i)
			  used[j]=1;
	for(i=2,numof=0;i<size;i++)
		if(!used[i])
			prime[numof++]=i;
  /*for(i=2;i<=n;i++)
	  for(q=i,j=0;j<numof&&q>1;j++)
			if(!(q%prime[j]))
			{
			  a[i][qwe[i]][0]=prime[j];
				while(!(q%prime[j]))
				{
				  a[i][qwe[i]][1]++;
					q/=prime[j];
				}
				qwe[i]++;
			}*/
	for(i=2;i<=n;i++)
		for(q=i,j=0;j<numof&&q>1;j++)
			if(!(q%prime[j]))
			{
			  memcpy(a[i],a[q/prime[j]],sizeof(a[i]));
				qwe[i]=qwe[q/prime[j]];
				a[i][qwe[i]++]=prime[j];
				break;
			}
	for(q=m,j=0;j<numof&&q>1;j++)
		if(!(q%prime[j]))
		{
			mask[masklen][0]=prime[j];
			while(!(q%prime[j]))
			{
				mask[masklen][1]++;
				q/=prime[j];
			}
			masklen++;
		}
	if(q>1){printf("0"); return 0;}
	for(i=1;i<=n;i++)
	{
		for(j=0;j<qwe[n-i+1];j++)
			curr[a[n-i+1][j]]++;
		for(j=0;j<qwe[i];j++)
  	  curr[a[i][j]]--;
    for(j=0;j<masklen;j++)
		  if(curr[mask[j][0]]<mask[j][1])break;
		if(j==masklen)
			out[outlen++]=i;
	  
	}
	printf("%i",outlen);
	for(i=0;i<outlen;i++)
		printf("%c%i",i?' ':'\n',out[i]+1);
	return 0;
}