#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
const double eps = 1e-8;
const double PI = acos(-1.0);
const int MAXN = 1e5 + 5;
const int MAXM = 2e6 + 5;
const int MOD = 1e9 + 7;
int sgn(double x) {
  if (fabs(x) < eps) return 0;
  if (x < 0)
    return -1;
  else
    return 1;
}
long long pw(long long a, long long n, long long mod) {
  long long ret = 1;
  while (n) {
    if (n & 1) ret = ret * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return ret;
}
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
void inc(long long &a, long long b) {
  a += b;
  if (a >= MOD) a -= MOD;
}
void dec(long long &a, long long b) {
  a -= b;
  if (a < 0) a += MOD;
}
int mul(int x, int y) {
  long long z = 1ll * x * y;
  return z - z / MOD * MOD;
}
long long a, b, c, ans = INF;
vector<int> va, vb;
int main() {
  scanf("%lld%lld", &a, &b);
  for (int i = 1; (long long)i * i <= a; i++) {
    if (a % i == 0) {
      va.push_back(i);
      if (a / i != i) va.push_back(a / i);
    }
  }
  sort((va).begin(), (va).end());
  for (int i = 1; (long long)i * i <= b; i++) {
    if (b % i == 0) {
      vb.push_back(i);
      if (b / i != i) vb.push_back(b / i);
    }
  }
  sort((vb).begin(), (vb).end());
  c = a + b;
  int j = 0;
  for (int i = 1; (long long)i * i <= c; i++) {
    if (c % i == 0) {
      while (j + 1 < ((int)(va).size()) && va[j + 1] <= i) j++;
      if ((va[j] <= i) && (a / va[j] <= c / i)) ans = min(ans, 2 * (i + c / i));
    }
  }
  j = 0;
  for (int i = 1; (long long)i * i <= c; i++) {
    if (c % i == 0) {
      while (j + 1 < ((int)(vb).size()) && vb[j + 1] <= i) j++;
      if ((vb[j] <= i) && (b / vb[j] <= c / i)) ans = min(ans, 2 * (i + c / i));
    }
  }
  printf("%lld\n", ans);
}
