#include<bits/stdc++.h>
#include<string>
#include <cstring>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <fstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <climits>
#include <cstdlib>
#include <ctime>
#include <memory.h>
#include <cassert>
#include<unordered_map>

#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define REP(i, a, b) for(int i = (a); i <=(b); ++i)
#define REPD(i, a, b) for(int i = (a); i >=(b); --i)
#define TR(it, a) for(typeof(a.begin()) it = a.begin(); it != a.end(); ++it)
#define RESET(a, v) memset(a, (v), sizeof(a))
#define SZ(a) (int(a.size()))
#define ALL(a) a.begin(), a.end()
#define PB push_back
#define MP make_pair
#define II pair<int, int>
#define X first
#define Y second
#define VI vector<int>
#define VII vector<II>
#define endl '\n'
#define ll long long int
#define mod 1000000007
#define mk(arr,n,type) type*arr=new type[n];

using namespace std;

void cpc()
{
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen ("output.txt", "w", stdout);
#endif

}

long long int gcd(long long int a, long long int b) {
	if (b == 0)
		return a;
	return gcd(b, a % b);
}
bool isPrime(int n)
{
	if (n <= 1)
		return false;
	if (n <= 3)
		return true;

	if (n % 2 == 0 || n % 3 == 0)
		return false;

	for (int i = 5; i * i <= n; i = i + 6)
		if (n % i == 0 || n % (i + 2) == 0)
			return false;

	return true;
}

int main() {
	cpc();
	ios_base::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	long int n, m;
	cin >> n >> m;

	if (m / 2 >= n)cout << m / 2;
	else {
		int range = m ;
		int ans = 1;
		for (int i = 1 ; i <= range ; i++) {
			int start = n / i;
			if (n % i == 0) {
				if ((start + 1)*i <= m)ans = max(ans , (int)gcd(i * (start + 1) , i * (start )));
			}
			else {
				if ((start + 2)*i <= m)ans = max(ans , (int)gcd(i * (start + 1) , i * (start + 2)));
			}

		}
		cout << ans << endl;
	}


	return 0;


}
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
    long long a, b;
    scanf("%lld%lld", &a, &b);
    if(b>=2*a)
    {
        printf("%lld", b / 2);
        return 0;
    }
    long long gcd = b - a;
    while(gcd)
    {
        int down, up;
        if(a%gcd==0)
            down = a;
        else
            down = (a / gcd + 1) * gcd;
        up = b / gcd * gcd;
        if(down<up)
        {
            printf("%lld", gcd);
            return 0;
        }
        gcd--;
    }
    return 0;
}