#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";
}
}