#include <bits/stdc++.h>
using namespace std;
vector<pair<long long int, long long int> > getfac(long long int n) {
  vector<pair<long long int, long long int> > ret;
  for (long long int i = 1; i < sqrt(n) + 1; i++) {
    if (n % i == 0) {
      ret.push_back({min({i, n / i}), max({i, n / i})});
    }
  }
  return ret;
}
bool fun1(pair<long long int, long long int> a,
          pair<long long int, long long int> b) {
  return a.first + a.second < b.first + b.second;
}
bool isin(pair<long long int, long long int> a,
          pair<long long int, long long int> b) {
  return b.first <= a.first && a.second >= b.second;
}
long long int max(long long int a, long long int b) {
  if (a <= b) return a;
  return b;
}
long long int min(long long int a, long long int b) {
  if (a <= b) return b;
  return a;
}
int main() {
  long long int a, b, c, d, ans = 1e17;
  cin >> a >> b;
  c = a;
  d = b;
  a = min({c, d});
  b = max({c, d});
  vector<pair<long long int, long long int> > af = getfac(a), bf = getfac(b),
                                              cf = getfac(a + b);
  sort(cf.begin(), cf.end(), fun1);
  for (int i = 0; i < cf.size(); i += 1) {
    long long int p = cf[i].first, q = cf[i].second;
    for (int j = 0; j < af.size(); j++) {
      if (isin(cf[i], af[j])) {
        ans = min({ans, 2 * (p + q)});
      }
    }
    for (int j = 0; j < bf.size(); j++) {
      if (isin(cf[i], bf[j])) {
        ans = min({ans, 2 * (p + q)});
      }
    }
  }
  printf("%lld\n", ans);
  return 0;
}
