#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
long long a, b;
long long qGCD(long long a, long long b) {
  if (a == 0) return b;
  if (b == 0) return a;
  if (!(a & 1) && !(b & 1))
    return qGCD(a >> 1, b >> 1) << 1;
  else if (!(b & 1))
    return qGCD(a, b >> 1);
  else if (!(a & 1))
    return qGCD(a >> 1, b);
  else
    return qGCD(abs(a - b), min(a, b));
}
int main() {
  scanf("%lld%lld", &a, &b);
  if (a == b) {
    printf("0");
    return 0;
  }
  if (a < b) swap(a, b);
  long long ans = 0;
  long long c = a - b;
  long long temp = a / qGCD(a, b) * b;
  long long t, k;
  for (long long i = 1; i * i <= c; i++) {
    if (c % i != 0) continue;
    t = b % i;
    if (t == 0)
      k = 0;
    else
      k = i - t;
    if ((a + k) / qGCD(a + k, b + k) * (b + k) < temp) {
      ans = k;
      temp = (a + k) / qGCD(a + k, b + k) * (b + k);
    }
    long long ii = c / i;
    t = b % ii;
    if (t == 0)
      k = 0;
    else
      k = ii - t;
    if ((a + k) / qGCD(a + k, b + k) * (b + k) < temp) {
      ans = k;
      temp = (a + k) / qGCD(a + k, b + k) * (b + k);
    }
  }
  printf("%lld", ans);
  return 0;
}
