#include<algorithm>
#include"vector"
#include<string>
#include<iostream>
#include<fstream>
using namespace std;

ifstream fi("irrelevant.in");
ofstream fo("irrelevant.out");
typedef vector<int> veci;typedef vector<double> vecd;typedef vector<string> vecs;

#define forn(i,n) if(true)for(int i=0;i<(n);i++)
#define feach(i,v) forn(i,((int)v.size()))
#define VA(v) v.begin(),v.end()

int prime[10001];
int nprime;

void fprimes(){
	int b[100001];
	fill(b,b+100001,0);

	nprime=0;
	for(int i=2;i<=100000;i++){
		if(b[i]) continue;
		for(int j=i;j<=100000;j+=i)
			b[j]=1;
		prime[nprime++]=i;
	}
}

struct tnum{
	int a[10001];
	int ap,am;

	void clr(){fill(a,a+10001,0);ap=0;am=0;}
	void add(int v){
		int i=0;
		while(v>1){
			if(v%prime[i]){i++;continue;}
			v/=prime[i];
			if(a[i]<0) am--;
			if(a[i]>=0) ap++;
			a[i]++;
		}
	}
	void sub(int v){
		int i=0;
		while(v>1){
			if(v%prime[i]){i++;continue;}
			v/=prime[i];
			if(a[i]>0) ap--;
			if(a[i]<=0) am++;
			a[i]--;
		}
	}
};

int m[100001];

int main(){
	fprimes();
	
	int n;
	int m;

	fi>>n>>m;

	veci ans;

	tnum a;
	a.clr();
	for(int i=0;i<n;i++){
		a.sub(m);

		if(!a.am){
			//m[i]=1;
			ans.push_back(i);
		}

		a.add(m);

		a.sub(i+1);
		a.add(n-i-1);
	}

	fo<<ans.size()<<endl;
	feach(i,ans){
		fo<<ans[i]+1<<" ";
	}

	/*
	tnum a;
	a.clr();
	a.add(111);
	*/

	return 0;
}