#include <bits/stdc++.h>
using namespace std;
const int MAX_UF = 2000007;
int pars[MAX_UF];
void init(int n) {
  for (int i = 0; i < n; i++) pars[i] = i;
}
int getRoot(int x) { return x == pars[x] ? x : (pars[x] = getRoot(pars[x])); }
bool isSame(int x, int y) { return getRoot(x) == getRoot(y); }
void merge(int x, int y) { pars[getRoot(x)] = getRoot(y); }
bool visited[MAX_UF];
int N, M;
void proc(int ii) {
  if (visited[ii]) return;
  visited[ii] = true;
  int n = ((ii + 2 * (M - 1)) % (2 * N - 2) + (2 * N - 2)) % (2 * N - 2);
  merge(ii, n);
  proc(n);
  n = ((ii - 2 * (M - 1)) % (2 * N - 2) + (2 * N - 2)) % (2 * N - 2);
  merge(ii, n);
  proc(n);
}
int solve() {
  init(2 * (N - 1));
  int ans = 0;
  for (int i = 1; i < N; i++) {
    merge(i, 2 * (N - 1) - i);
  }
  for (int i = 0; i < N; i++) {
    proc(i);
  }
  for (int i = 0; i < 2 * (N - 1); i++)
    if (getRoot(i) == i) {
      ans++;
    }
  return ans;
}
int main() {
  scanf("%d%d", &N, &M);
  printf("%d\n", solve());
  return 0;
}
