#include <bits/stdc++.h>

using namespace std;

int A, B;

int calcGCD(int a, int b) {
	while (b != 0) {
		int r = a % b;
		a = b;
		b = r;
	}
	return a;
}

long long calcLCM(int a, int b) {
	return (long long) a / calcGCD(a, b) * b;
}

// get min x s.t. (a + x) % k = 0 and x > 0
int calcX(int a, int k) {
	int ret = 0;
	if (a % k == 0) {
		a++;
		ret++;
	}

	int x = -a % k;
	x = (k + x) % k;
	ret += x;
	return ret;
}

int main() {
	// assert(freopen("lcm.in", "r", stdin));
	// assert(freopen("lcm.out", "w", stdout));
	cin.sync_with_stdio(false);

	cin >> A >> B;

	if (A == B) {
		cout << 1 << endl;
		return 0;
	}
	
	// A < B
	// LCM(A + X, B + X) = (A + X)(B + X) / GCD(A + X, B + X)
	// GCD(A + X, B + X) = GCD(A + X, B - A)
	// GCD(A + X, B - A) = k => (A + X) % k = 0 => X = -A % k

	if (A > B) {
		swap(A, B);
	}

	long long minLCM = calcLCM(A + 1, B + 1);
	int minN = 1;
	int D = B - A;
	for (int d = 2; d * d <= D; d++) {
		if (D % d == 0) {
			int x = calcX(A, d);
			long long lcm = calcLCM(A + x, B + x);
			if (lcm < minLCM) {
				minLCM = lcm;
				minN = x;
			} else if (lcm == minLCM && x < minN) {
				minN = x;
			}
		}
	}

	cout << minN << endl;

	return 0;
}