#include <bits/stdc++.h>
using namespace std;
long long a, b, ans;
bool isprime(long long x) {
  for (long long i = 2; i * i <= x; i++) {
    if (x % i == 0) return false;
  }
  return true;
}
struct dot {
  long long x;
  long long y;
};
int main() {
  vector<struct dot> x, y, z;
  cin >> a >> b;
  ans = a + b;
  long long Ans = 2 * 100000000000000 + 3;
  if (isprime(ans)) {
    printf("%lld", 2 * ans + 2);
    return 0;
  }
  for (long long i = 1; i * i <= a; i++) {
    if (a % i == 0) x.push_back({i, a / i});
  }
  for (long long i = 1; i * i <= b; i++) {
    if (b % i == 0) y.push_back({i, b / i});
  }
  for (long long i = 1; i * i <= ans; i++) {
    if (ans % i == 0) z.push_back({i, ans / i});
  }
  int flag = 1;
  for (int i = z.size() - 1; i >= 0 && flag; i--) {
    long long X = z[i].x;
    long long Y = z[i].y;
    for (int j = 0; j < x.size() && flag; j++) {
      if ((x[j].x <= X && x[j].y <= Y) || (x[j].x <= Y && x[j].y <= X))
        flag = 0;
    }
    for (int j = 0; j < y.size() && flag; j++) {
      if ((y[j].x <= X && y[j].y <= Y) || (y[j].x <= Y && y[j].y <= X))
        flag = 0;
    }
    if (!flag) Ans = min(Ans, 2 * (X + Y));
  }
  cout << Ans;
  return 0;
}
