res;
while (x != 1) {
res.push_back(f[x]);
x /= f[x];
}
return res;
}
vector factor(int x) {
vector fl = factorList(x);
if (fl.size() == 0) return {};
vector res(1, P(fl[0], 0));
for (int p : fl) {
if (res.back().first == p) {
res.back().second++;
} else {
res.emplace_back(p, 1);
}
}
return res;
}
vector> factor(ll x) {
vector> res;
for (int p : primes) {
int y = 0;
while (x%p == 0) x /= p, ++y;
if (y != 0) res.emplace_back(p,y);
}
if (x != 1) res.emplace_back(x,1);
return res;
}
};
int main(){
long long l, r;
cin >> l >> r;
Sieve sieve(22250000);
auto primes = sieve.primes;
auto judge = [&](long long x){
vector> factors;
for(auto p : primes){
int cnt = 0;
while(x % p == 0){
cnt++;
x/= p;
}
if(cnt > 0) factors.emplace_back(p, cnt);
}
if(x > 1) factors.emplace_back(x, 1);
if(factors.size() == 3){
if(factors[0].first != 2 and factors[0].second == 2 and factors[1].second == 1 and factors[2].second == 1){
return 1;
}
}
return 0;
};
for(long long x = ((l + 44) / 45 * 45); x <= r; x += 45){
if(judge(x)){
cout << x << "\n";
return 0;
}
}
for(long long x = l; x <= r; x++){
if(judge(x)){
cout << x << "\n";
return 0;
}
}
cout << "-1\n";
return 0;
}