#include <bits/stdc++.h>
using namespace std;
namespace io {
char *iS, *iT, ibuff[(1 << 21 | 1)], obuff[(1 << 21 | 1)],
    *oS = obuff, *oT = oS + (1 << 21 | 1) - 1, fu[110], c;
int fr;
template <class Type>
inline void read(Type &x) {
  x = 0;
  Type y = 1;
  for (c = (io::iS == io::iT
                ? (io::iT = (io::iS = io::ibuff) +
                            fread(io::ibuff, 1, (1 << 21 | 1), stdin),
                  (io::iS == io::iT ? EOF : *io::iS++))
                : *io::iS++);
       (c > '9' || c < '0') && c != '-';
       c = (io::iS == io::iT
                ? (io::iT = (io::iS = io::ibuff) +
                            fread(io::ibuff, 1, (1 << 21 | 1), stdin),
                  (io::iS == io::iT ? EOF : *io::iS++))
                : *io::iS++))
    ;
  c == '-' ? y = -1 : x = (c & 15);
  for (c = (io::iS == io::iT
                ? (io::iT = (io::iS = io::ibuff) +
                            fread(io::ibuff, 1, (1 << 21 | 1), stdin),
                  (io::iS == io::iT ? EOF : *io::iS++))
                : *io::iS++);
       c >= '0' && c <= '9';
       c = (io::iS == io::iT
                ? (io::iT = (io::iS = io::ibuff) +
                            fread(io::ibuff, 1, (1 << 21 | 1), stdin),
                  (io::iS == io::iT ? EOF : *io::iS++))
                : *io::iS++))
    x = x * 10 + (c & 15);
  x *= y;
}
inline void reads(char *x) {
  for (c = (io::iS == io::iT
                ? (io::iT = (io::iS = io::ibuff) +
                            fread(io::ibuff, 1, (1 << 21 | 1), stdin),
                  (io::iS == io::iT ? EOF : *io::iS++))
                : *io::iS++);
       c == ' ' || c == '\n';
       c = (io::iS == io::iT
                ? (io::iT = (io::iS = io::ibuff) +
                            fread(io::ibuff, 1, (1 << 21 | 1), stdin),
                  (io::iS == io::iT ? EOF : *io::iS++))
                : *io::iS++))
    ;
  for (; c != ' ' && c != '\n' && c != EOF;
       *x = c,
       c = (io::iS == io::iT
                ? (io::iT = (io::iS = io::ibuff) +
                            fread(io::ibuff, 1, (1 << 21 | 1), stdin),
                  (io::iS == io::iT ? EOF : *io::iS++))
                : *io::iS++),
       ++x)
    ;
}
template <class Type>
inline void print(Type x, char text = '\n') {
  if (x < 0)
    (io::oS == io::oT ? (fwrite(io::obuff, 1, io::oS - io::obuff, stdout),
                         io::oS = io::obuff, (*io::oS++ = '-'))
                      : *io::oS++ = '-'),
        x *= -1;
  if (x == 0)
    (io::oS == io::oT ? (fwrite(io::obuff, 1, io::oS - io::obuff, stdout),
                         io::oS = io::obuff, (*io::oS++ = '0'))
                      : *io::oS++ = '0');
  while (x) fu[++fr] = x % 10 + '0', x /= 10;
  while (fr)
    (io::oS == io::oT ? (fwrite(io::obuff, 1, io::oS - io::obuff, stdout),
                         io::oS = io::obuff, (*io::oS++ = fu[fr--]))
                      : *io::oS++ = fu[fr--]);
  (io::oS == io::oT ? (fwrite(io::obuff, 1, io::oS - io::obuff, stdout),
                       io::oS = io::obuff, (*io::oS++ = text))
                    : *io::oS++ = text);
}
inline void prints(char *x, char *y = NULL, char text = '\n') {
  for (; *x && x != y; ++x)
    (io::oS == io::oT ? (fwrite(io::obuff, 1, io::oS - io::obuff, stdout),
                         io::oS = io::obuff, (*io::oS++ = *x))
                      : *io::oS++ = *x);
  (io::oS == io::oT ? (fwrite(io::obuff, 1, io::oS - io::obuff, stdout),
                       io::oS = io::obuff, (*io::oS++ = text))
                    : *io::oS++ = text);
}
}  // namespace io
using io::print;
using io::prints;
using io::read;
using io::reads;
long long n, x, a, b, ans;
signed main() {
  read(n), read(x);
  ans = n, a = x, b = n - x;
  while (1) {
    if (a < b) swap(a, b);
    if (a % b == 0) {
      ans += a * 2 - 1;
      break;
    } else {
      ans += a / b * 2 * b;
      a %= b;
    }
  }
  print(ans);
  fwrite(io::obuff, 1, io::oS - io::obuff, stdout);
  return 0;
  ;
}
