#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int a, b;
  cin >> a >> b;
  long long int k = a + b;
  vector<long long int> v;
  for (long long int i = 1; i <= sqrt(k); i++) {
    if (k % i == 0) v.push_back(i);
  }
  vector<long long int> t;
  vector<long long int> g;
  for (long long int i = 1; i <= sqrt(a); i++) {
    if (a % i == 0) t.push_back(i);
  }
  for (long long int i = 1; i <= sqrt(b); i++) {
    if (b % i == 0) g.push_back(i);
  }
  long long int i = v.size() - 1;
  int u = 0;
  for (i = v.size() - 1; i >= 0; i--) {
    vector<long long int>::iterator it = lower_bound(t.begin(), t.end(), v[i]);
    int pp = it - t.begin();
    if (pp == t.size() || (pp < t.size() && t[pp] > v[i])) pp--;
    if (pp >= 0 && (a / t[pp]) <= (k / v[i])) {
      u = 1;
      break;
    }
  }
  long long int ans1 = 0, ans2 = 0;
  if (u == 1) {
    ans1 = 2 * (k / v[i] + v[i]);
  }
  u = 0;
  i = v.size() - 1;
  for (i = v.size() - 1; i >= 0; i--) {
    vector<long long int>::iterator it = lower_bound(g.begin(), g.end(), v[i]);
    int pp = it - g.begin();
    if (pp == g.size() || (pp < g.size() && g[pp] > v[i])) pp--;
    if (pp >= 0 && (b / g[pp]) <= (k / v[i])) {
      u = 1;
      break;
    }
  }
  if (u == 1) ans2 = 2 * (k / v[i] + v[i]);
  if (ans1 != 0 && ans2 != 0) {
    cout << min(ans1, ans2);
  } else if (ans1 != 0)
    cout << ans1;
  else
    cout << ans2;
  return 0;
}
