#include <stdio.h>
#include <vector>
using namespace std;

int gcd(int x,int y){
	if (x<y) return gcd(y,x);
	int n;
	do {
		n = x%y;
		x = y;
		y = n;
	} while (n!=0);
	return x;
}

vector<int> primes;
int siemat[320000];

void prepPrime(){
	primes.clear();

	memset(siemat, 0, sizeof(siemat));
	siemat[0] = 1;
	siemat[1] = 1;

	for (int i=2;i<32000;i++){
		if (!siemat[i]){
			for (int j=i+i;j<32000;j+=i){
				siemat[j]++;
			}
		}
	}
	for (int i=2;i<32000;i++){
		if (!siemat[i]) primes.push_back(i);
	}
}

int isPrime(int x){
	for (int i=0;i<primes.size();i++){
		if (! (x%primes[i])) return 0;
	}
	return 1;
}

int main(){
	int n,k;
	prepPrime();
	
	while (scanf("%d%d", &n,&k)!=EOF){
		if (n==k){
			printf("%d\n", k);
		} else if (isPrime(k)){
			if (n>=k) 
				printf("%d\n", k); 
			else 
				puts("1");
		} else {
    		int t = k;
    		int res = 1;
    		for (int i=n;i>0;i--){
    			if (t==1) break;
    
    			int tt = gcd(t,i);
    			res*=tt;
    			t/=tt;
    		}
    		printf("%d\n", res);
		}
	}

	return 0;
}
