#include <stdio.h>
int n,m;
int aM[100001],nM=0;
int bM[10000];
int k[100001];
int Number[100001];
int N=0;
int nP=0;
int P[10000];
int simple(int M){
	for(int i=0;P[i]*P[i]<M;i++){
		if(M%P[i]==0)
			return 0;
	}
	return 1;
}
int add(int M){
	P[nP++]=M;
	return 0;
}
int mod(){
	int T=0;
	for(int i=0;i<nM;i++){
		if(Number[bM[i]]<aM[bM[i]]){
			return 0;
		}
	}
	return 1;
}
int div(int *A,int M){
	int T=0;

	return T;
}
int GetDiv(int M){
	for(int i=0;i<nP;i++){
		if(M%P[i]==0){
			return P[i];
		}	
	}
	return 1;
}
int Mul(int M){
	while(M!=1){
		int k1=GetDiv(M);
		Number[k1]++;
		M=M/k1;
	}
	return 0;
}
int Div(int M){
	while(M!=1){
		int k1=GetDiv(M);
		Number[k1]--;
		M=M/k1;
	}
	return 0;
}
int pr(){
	for(int i=0;i<nP;i++){
		for(int j=0;j<Number[P[i]];j++){
			printf("%d*",P[i]);
		}
	}
	printf("\n");
	return 0;
}
int Sol(){
	add(2);
	add(3);
	int t1=n;
	if(t1<m)
		t1=m;
	for(int i=5;i<t1+10;i+=2){
		if(simple(i)){
			add(i);
		}
	}
	int T=m;
	nM=0;
	for(i=0;i<10000;i++){
		aM[i]=0;
	}
	while(T!=1){
		int k1=GetDiv(T);
		aM[k1]++;
		bM[nM++]=k1;
		T=T/k1;
	}
//	printf("M = ");
/*	for(i=0;i<10000 ;i++){
		if(aM[i])
			printf("%d ",i);
	}
*/
//	printf("\nTotal p=%d\n",nP);
	for(i=0;i<10000;i++){
		Number[i]=0;
	}

	for(i=1;i<n;i++){
		if(mod()){
			k[N++]=i;
		}
	//	pr();
		Mul(n-i);
	//	pr();
		Div(i);
	}
	return 0;
}
int main(){
	FILE *f=fopen("irrelevant.in","r");
	fscanf(f,"%d%d",&n,&m);
	fclose(f);
	N=0;
	Sol();
	f=fopen("irrelevant.out","w");
	fprintf(f,"%d\n",N);
	for(int i=0;i<N;i++){
		fprintf(f,"%d ",k[i]);
	}
	return 0;
}