#include <bits/stdc++.h>
#pragma GCC optimize("-O2")
using namespace std;
void err(istream_iterator<string> it) {}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << endl;
  err(++it, args...);
}
const int LIM = 1e5 + 5, MOD = 1e9 + 7;
int t, n, m, k, x, y;
vector<int> par, rk;
int getpar(int i) { return (par[i] == i) ? i : (par[i] = getpar(par[i])); }
bool join(int i, int j) {
  i = getpar(i), j = getpar(j);
  if (i == j) return 0;
  if (rk[i] > rk[j])
    par[j] = i;
  else {
    par[i] = j;
    if (rk[i] == rk[j]) rk[j]++;
  }
  return 1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  par.resize(2 * n + 2 * m - 2);
  for (int i = 0; i < par.size(); i++) par[i] = i;
  x = t + m + n + m - 2;
  rk.assign(2 * n + 2 * m - 2, 0);
  for (int i = 0; i < n; i++) {
    join(i + x, i);
    join(i + x + 1 - m, i + m - 1);
  }
  for (int i = 0; i < m; i++) {
    join(x - i, i);
    join(x - i + n - 1, i + n - 1);
  }
  set<int> st;
  for (int i = 0; i < par.size(); i++) {
    st.insert(getpar(i));
  }
  cout << st.size() << "\n";
  return 0;
}
