#include 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; }