#include <stdio.h>
#define MAXN 120000

int prime[MAXN];
int kolk[MAXN];
int kolM[MAXN];
int ans[MAXN],kolans;
int n,m;
int mas[MAXN],kolm=0;
int prost[MAXN],kolprost;
int primeM[MAXN],kolprimeM;

void GenPrime()
	{
	int i,j;
	for (i=2;i<=n;i++) prime[i]=1;
	for (i=2;i<=n;i++)
		{
		if (prime[i])
			{
			for (j=2*i;j<=n;j+=i)
				prime[j]=0;
			prost[kolprost++]=i;
			}
		}
	}

int Valid()
	{
	int i;
	for (i=0;i<kolprimeM;i++)
		if (kolk[primeM[i]]<kolM[primeM[i]]) return 0;
	return 1;
	}

int FillUp(int tr, int *mas)
	{
	int i,z=tr;
	for (i=0;i<kolprost && prost[i]*prost[i]<=tr && z>1;i++)
		while (z%prost[i]==0)
			{
			z/=prost[i];
			mas[prost[i]]++;
			}

	if (z>prost[kolprost-1]) return 0;
	mas[z]++;
	return 1;
	}

void FillDown(int tr, int *mas)
	{
	int i,z=tr;
	for (i=0;i<kolprost && prost[i]*prost[i]<=tr && z>1;i++)
		while (z%prost[i]==0)
			{
			z/=prost[i];
			mas[prost[i]]--;
			}

	mas[z]--;
	}

int main()
	{
	freopen("irrelevant.in","rt",stdin);
	freopen("irrelevant.out","wt",stdout);

	scanf("%d %d", &n, &m);
	n--;
	int k,i;
	GenPrime();

	int res=FillUp(m, kolM);
	if (!res)
		{
		printf("0\n");
		return 0;
		}

	for (i=2;i<=n;i++)
		if (kolM[i]>0)	primeM[kolprimeM++]=i;


	FillUp(n, kolk);
	for (k=1;k<=n-1;k++)
		{
		if (k!=1)
			{
			FillUp(n-k+1, kolk);
			FillDown(k, kolk);
			}

		if (Valid()) ans[kolans++]=k+1;
		}

	printf("%d\n", kolans);
	for (k=0;k<kolans;k++)
		{
		printf("%d", ans[k]);
		if (k==kolans-1) printf("\n");
		else printf(" ");
		}

	return 0;
	}