#include <bits/stdc++.h>
using namespace std;
static char _buf[1 << 16];
int _pos = 1;
int _cap = 1;
inline char nextChar() {
  if (_cap == 0) return 0;
  if (_pos == _cap) {
    _cap = (int)fread(_buf, 1, 1 << 16, stdin);
    if (_cap == 0) return 0;
    _pos = 0;
  }
  return _buf[_pos++];
}
template <class T>
T nextInt() {
  char c = nextChar();
  while (isspace(c)) c = nextChar();
  int sign = 1;
  if (c == '-') {
    sign = -1;
    c = nextChar();
  }
  T res = 0;
  while (isdigit(c)) {
    res = res * 10 + c - '0';
    c = nextChar();
  }
  return res * sign;
}
unsigned np[1000000];
long long p[1973815];
int pc;
long long da[1000000];
long long db[1000000];
long long dab[1000000];
pair<long long, int> f[1000];
int Factorize(long long a, pair<long long, int>* f) {
  int fc = 0;
  for (int i = 0; p[i] * p[i] <= a; i++) {
    if (a % p[i] == 0) {
      f[fc] = make_pair(p[i], 0);
      while (a % p[i] == 0) {
        a /= p[i];
        ++f[fc].second;
      }
      ++fc;
    }
  }
  if (a != 1) f[fc++] = make_pair(a, 1);
  return fc;
}
void Divs(pair<long long, int>* f, int fc, int pos, long long* d, int& dc,
          long long cur) {
  if (pos == fc) {
    d[dc++] = cur;
    return;
  }
  for (int i = 0; i <= f[pos].second; i++) {
    Divs(f, fc, pos + 1, d, dc, cur);
    cur *= f[pos].first;
  }
}
int Divs(long long a, long long* d) {
  int fc = Factorize(a, f);
  int dc = 0;
  Divs(f, fc, 0, d, dc, 1);
  sort(d, d + dc);
  return dc;
}
int main() {
  int bits = sizeof(np) * 8;
  for (int i = 2; i * i < bits; i++)
    if ((np[i >> 5] & (1 << (i & 31))) == 0)
      for (int j = i * i; j < bits; j += i) np[j >> 5] |= 1 << (j & 31);
  for (int i = 2; i < bits; i++)
    if ((np[i >> 5] & (1 << (i & 31))) == 0) p[pc++] = i;
  long long a = nextInt<long long>();
  long long b = nextInt<long long>();
  long long ab = a + b;
  int ac = Divs(a, da);
  int bc = Divs(b, db);
  int c = Divs(ab, dab);
  long long best = ab + ab + 2;
  for (int i = 0; i < c; i++) {
    long long p0 = dab[i];
    long long p1 = ab / p0;
    long long curp = p0 + p0 + p1 + p1;
    int ai = (int)(upper_bound(da, da + ac, p0) - da - 1);
    int bi = (int)(upper_bound(db, db + bc, p0) - db - 1);
    if (a / da[ai] <= p1 || b / db[bi] <= p1) {
      best = min(best, curp);
    }
  }
  cout << best << endl;
  return 0;
}
