#include <bits/stdc++.h>
const bool debug = 0;
std::vector<unsigned long long> divisors(unsigned long long n) {
  std::vector<unsigned long long> ret{1}, st{n};
  for (unsigned long long i = 2; i * i <= n; ++i) {
    unsigned long long j = n / i;
    if (i * j == n) {
      ret.push_back(i);
      st.push_back(j);
    }
  }
  if (st.back() == ret.back()) {
    st.pop_back();
  }
  while (!st.empty()) {
    ret.push_back(st.back());
    st.pop_back();
  }
  return ret;
}
int main() {
  if (!debug) std::ios_base::sync_with_stdio(false);
  std::cin.tie(0);
  std::cout.tie(0);
  std::cerr.tie(0);
  ;
  unsigned long long a, b;
  std::cin >> a >> b;
  unsigned long long s = a + b;
  std::vector<unsigned long long> div_s = divisors(s);
  std::vector<unsigned long long> div_a = divisors(a);
  std::vector<unsigned long long> div_b = divisors(b);
  unsigned long long answ = (unsigned long long)1e18L;
  for (unsigned long long side1 : div_s) {
    unsigned long long side2 = s / side1;
    unsigned long long min = std::min(side1, side2);
    unsigned long long max = std::max(side1, side2);
    {
      auto it =
          std::prev(std::upper_bound((div_a).begin(), (div_a).end(), min));
      if (*it <= min && a / *it <= max) {
        answ = std::min(answ, 2 * (min + max));
      }
    }
    {
      auto it =
          std::prev(std::upper_bound((div_b).begin(), (div_b).end(), min));
      if (*it <= min && b / *it <= max) {
        answ = std::min(answ, 2 * (min + max));
      }
    }
  }
  std::cout << answ;
  return 0;
}
