#include <bits/stdc++.h>
using namespace std;
const int LIM = 1e5 + 5, MOD = 1e9 + 7;
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long fastpowMOD(long long a, long long p, long long MOD) {
  if (p == 0) return 1;
  long long z = fastpowMOD(a, p / 2, MOD);
  z = (z * z) % MOD;
  if (p % 2) z = (z * a) % MOD;
  return z;
}
bool seive[2005];
void SieveOfEratosthenes(long long n) {
  memset(seive, true, sizeof(seive));
  for (long long p = 2; p * p <= n; p++)
    if (seive[p] == true)
      for (long long i = p * p; i <= n; i += p) seive[i] = false;
}
long long fastpow(long long a, long long p) {
  if (p == 0) return 1;
  long long z = fastpow(a, p / 2);
  z = (z * z);
  if (p % 2) z = (z * a);
  return z;
}
void fact(long long n, vector<long long> &v1) {
  for (long long i = 1; i * i <= n; i++) {
    if (n % i == 0) (v1).push_back(i);
  }
}
long long solve(long long n, long long m) {
  long long a = n + m;
  vector<long long> va, vn;
  fact(n, vn);
  fact(a, va);
  long long va1 = va.size();
  long long ans = 1e18;
  for (long long i = va1 - 1; i >= 0; i--) {
    long long d1 = va[i];
    long long d2 = a / va[i];
    long long p = upper_bound(vn.begin(), vn.end(), d1) - vn.begin();
    p--;
    if (n / vn[p] <= d2) {
      ans = (d1 + d2) * 2;
      break;
    }
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n, m;
  cin >> n >> m;
  long long a = n + m;
  cout << min(solve(n, m), solve(m, n));
}
