#include <bits/stdc++.h>
using namespace std;
#define int long long
#define max(a, b) (a < b ? b : a)
#define min(a, b) ((a > b) ? b : a)
#define F first
#define S second
#define PB push_back
const int mod = 1000000007;
const int infinity = 1000000000000000000;

//finding power in O(logN) modulo mod.
int power(int base, int exp) {
    int res=1;
    while(exp>0) {
       if(exp%2==1) res=(res*base)%mod;
       base=(base*base)%mod;
       exp/=2;
    }
    return res%mod;
}

//factorial and mutiplicative inverse to find nCr modulo mod.
int multiplicative_inverse(int n, int m){
    return power(n, (m-2));
}

vector<int> fac;
vector<int> invfac;
void precompute_factorial(int n){
    fac.push_back(1);
    fac.push_back(1);
    invfac.push_back(1);
    invfac.push_back(1);
    for(int i=2;i<=n;i++){
        int var=(fac[i-1]*i)%mod;
        fac.push_back(var);
        invfac.push_back(multiplicative_inverse(var, mod));
    }
}

int const rest = 1e6+5;
vector<bool> prime_bool(rest+1, true);
vector<int> prime;
//seive algo for prime no.s
void find_prime(){
    for(int i=2;i*i<=rest;i++){
        if(prime_bool[i]==false) continue;
        else{
            for(int j=i*i;j<=rest;j+=i){
                prime_bool[j]=false;
            }
        }
    }
    for(int i=2;i<=rest;i++){
        if(prime_bool[i]==true){
            prime.push_back(i);
        }
    }
}


int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    // find_prime();
    int q;
    // cin>>q;
    q = 1;
    while(q--){
        int x, y;
        cin>>x>>y;

        map<int, int> m;
        int a = x, b = y;
        for(int i=2;i*i<=a;i++){
            while(x%i==0){
                m[i]++;
                x/=i;
            }
        }
        if(x!=1){
            m[x]++;
        }
        for(int i=2;i*i<=b;i++){
            while(y%i==0){
                m[i]++;
                y/=i;
            }
        }
        if(y!=1){
            m[y]++;
        }
        // for(int i=0;prime[i]*prime[i]<=a;i++){
        //     while(x%prime[i]==0){
        //         m[prime[i]]++;
        //         x/=prime[i];
        //     }
        // }
        // if(x!=1){
        //     m[x]++;
        // }
        // for(int i=0;prime[i]*prime[i]<=b;i++){
        //     while(y%prime[i]==0){
        //         m[prime[i]]++;
        //         y/=prime[i];
        //     }
        // }
        // if(y!=1){
        //     m[y]++;
        // }
        int ans = 1;
        for(auto i:m){
            ans *= (i.second+1);
        }
        cout<<ans<<"\n";
    }
}