func_code_string: #include <bits/stdc++.h>   using namespace std;   bool SR(int &x) { return scanf( %d , &x) == 1; }   bool SR(long long &x) { return scanf( %lld , &x) == 1; }   bool SR(double &x) { return scanf( %lf , &x) == 1; }   bool SR(char *s) { return scanf( %s , s) == 1; }   bool RI() { return true; }   template <typename I, typename... T>   bool RI(I &x, T &...tail) {     return SR(x) && RI(tail...);   }   void SP(const int x) { printf( %d , x); }   void SP(const long long x) { printf( %lld , x); }   void SP(const double x) { printf( %.16lf , x); }   void SP(const char *s) { printf( %s , s); }   void PL() { puts(  ); }   template <typename I, typename... T>   void PL(const I x, const T... tail) {     SP(x);     if (sizeof...(tail)) putchar(   );     PL(tail...);   }   const int maxn = 4e6 + 6;   struct Dsu {     int par[maxn], clc;     void init(int siz) {       clc = siz;       for (int i = 0; i < int(siz); i++) par[i] = i;     }     int find(int x) { return x == par[x] ? x : par[x] = find(par[x]); }     void merge(int a, int b) {       if (find(a) == find(b)) return;       par[find(a)] = find(b);       clc--;     }   } dsu;   int n, m;   void read() { RI(n, m); }   void build() {     int tot = n + m + n + m - 4;     dsu.init(tot);     int pt = 0;     for (int i = 0; i < int(tot / 2); i++) {       dsu.merge(i, pt--);       if (pt < 0) pt += tot;     }     pt = n - 1;     for (int i = (n - 1); i <= int(n - 1 + tot / 2 - 1); i++) {       dsu.merge(i, pt--);       if (pt < 0) pt += tot;     }   }   void sol() { PL(dsu.clc); }   int main() {     read();     build();     sol();     return 0;   }   