#include <iostream>
#include <bitset>
#include <vector>
using namespace std;

vector<long long> primes(const long long maxn){
	vector<bool> e_prim(maxn/2+1, true);
	vector<long long> rez = {2};
	bool good = true;
	for(long long i = 3; i <= maxn; i += 2){
		if(e_prim[i/2]){
			rez.push_back(i); }
		if(good){
			if(i*i > maxn){
				good = false;
				continue; }
			for(long long j = i*i; j <= maxn; j += 2*i){
				e_prim[j/2] = false; } } }
	return rez; }

int main(){
	long long a, b;
	cin >> a >> b;
	const auto v = primes(2*b);

	long long rez = -1;
	for(const auto p : v){
		if(2*a <= p && p <= a+b){
			rez = max(rez, p - 2*a + 1); }
		else if(a+b <= p && p <= 2*b){
			rez = max(rez, 2*b - p + 1); } }

	cout << rez;
	return 0; }