#include <vector>
#include <fstream>
#include <bitset>
#include <cmath>
#include <algorithm>
using namespace std;
int calcpieces(int n, int p, int perpiece, vector<int> &div) {
int x = p/perpiece*n;
int y = p - (p%perpiece);
x-=n;
y-=perpiece;
for(; y!=p; x++) {
for(int div_ : div) {
if((x%div_)==0)
goto fail;
}
y++;
fail:
continue;
}
return x - 1;
}
ifstream in("frac.in") ;
ofstream out("frac.out");
int main() {
bitset<109545> prime;
prime[0] = 1;
prime[1] = 1;
short int i[67] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331};
for(int x = 0; x<67; x++) {
for(int y = i[x] + i[x]; y<109545; y+=i[x])
prime[y] = 1;
}
long long int n, p;
in>>n>>p;
if((n<109545)&&!prime[n]) {
vector<int> x;
x.push_back(n);
out<<calcpieces(n, p, n - 1, x);
return 0;
}
int upper = -1;
for(int x = sqrt(n) + 1; x>=2; x--) {
if((!prime[x])&&((n%x)==0)) {
upper = x;
break;
}
}
if(upper==-1) {
vector<int> x;
x.push_back(n);
out<<calcpieces(n, p, n - 1, x);
return 0;
}
vector<int> divs;
divs.push_back(upper);
for(int x = upper - 1; x>=2; x--) {
if((!prime[x])&&((n%x)==0))
divs.push_back(x);
}
int perpiece_ = upper;
for(int x = 1; x<=upper; x++) {
for(int div_ : divs) {
if((x%div_)==0)
goto fail;
}
continue;
fail:
perpiece_--;
}
out<<calcpieces(upper, p, perpiece_, divs);
}