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