#include #include #include using namespace std; int a, b; long long best_lcm = -1; int best_n; int gcd(int a, int b) { if (!b) return a; return gcd(b, a % b); } long long lcm(long long a, long long b) { return a * b / gcd(a, b); } void check_solution(int gcd) { int n1 = gcd - a % gcd; if (n1 == gcd) n1 = 0; int n2 = gcd - b % gcd; if (n2 == gcd) n2 = 0; int dif = abs(n1 - n2); if (dif % gcd) return; int n; if (n1 < n2) n = n2; else n = n1; long long current_lcm = lcm(a + n, b + n); if (best_lcm == -1 || current_lcm < best_lcm || current_lcm == best_lcm && n < best_n) { best_lcm = lcm(a + n, b + n); best_n = n; } } int main() { cin >> a >> b; if (a > b) { swap(a, b); } int dif = b - a; if (dif == 0) { cout << "0"; return 0; } for (int i = 1; i * i <= dif; ++i) { if (dif % i) continue; check_solution(i); check_solution(dif / i); } cout << best_n; }