#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void chmax(T &a, const T &b) {
  if (a < b) a = b;
}
template <class T>
inline void chmin(T &a, const T &b) {
  if (a > b) a = b;
}
template <typename A, size_t N, typename T>
void Fill(A (&array)[N], const T &val) {
  std::fill((T *)array, (T *)(array + N), val);
}
template <class T = long long>
T in() {
  T x;
  cin >> x;
  return (x);
}
struct Fast {
  Fast() {
    std::cin.tie(0);
    ios::sync_with_stdio(false);
  }
} fast;
template <typename T>
using PQ = priority_queue<T, vector<T>, greater<T>>;
long long dx[] = {1, -1, 0, 0};
long long dy[] = {0, 0, 1, -1};
long long res;
long long rec(long long a, long long b) {
  res += (b / a) * 3 * a;
  if (b % a != 0) {
    res += 3 * a;
    res -= 2 * (b % a);
    rec(b % a, a - b % a);
  } else {
    return 0;
  }
}
long long solve() {
  long long n, x;
  cin >> n >> x;
  42;
  res = 0;
  rec(n - x, x);
  cout << res << endl;
  return 0;
}
long long test() { return 0; }
signed main() {
  solve();
  return 0;
}
