inline T read(){ T sum = 0, fl = 1; char ch = getchar(); for (; !isdigit(ch); ch = getchar()) if (ch == '-') fl = -1; for (; isdigit(ch); ch = getchar()) sum = sum * 10 + ch - '0'; return sum * fl; }
template <typename T>
inlinevoidwrite(T x){ if (x < 0) { putchar('-'), write<T>(-x); return; } static T sta[35]; int top = 0; do { sta[top++] = x % 10, x /= 10; } while (x); while (top) putchar(sta[--top] + 48); }
intmain(){ x = read<int>(), y = read<int>(); for (int i = x; i * i <= x * y && i < y >> 1; i += x) if (!(x * y % i) && gcd(i, x * y / i) == x) ans += 2; if (x == y) ans = 1; write<int>(ans); return0; }