#include <bits/stdc++.h>
using namespace std;

bitset<1000001> bs;
vector<long long> primes;
long long gcd(long long a, long long b) {
	if (a < b) return gcd(b, a);
	if (b == 0) return a;
	return gcd(b, a % b);
}
void sieve()
{
    bs.set();
    bs[0] = bs[1] = 0;
    for(int p=2; p*p<=1000000; p++)
    {
        if(bs[p])
        {
        primes.push_back(p);
            for(int i=p*p; i<=1000000; i+=p)
               bs[i] = 0;
        }
    }
}

int main()
{
    cin.tie(0);
    cin.sync_with_stdio(0);

    long long a,b,ans=1;
    cin >> a >> b;
    a = gcd(a,b);
    sieve();
      for(long long i:primes)
    {
        if (a%i == 0) ans++;
        while(a%i==0)
            a /= i;
    }
    if(a!=1) ans++;

	cout << ans;
    return 0;
}



