#include <bits/stdc++.h>
#define ll long long
std::ifstream fin("sumdiv.in");
std::ofstream fout("sumdiv.out");
bool ciur[50000001];
std::vector<int> prime;
void defciur(int a){
for (ll int i=2;i*i<=a*a;++i){
for (ll int j=i;i*j<=a*a;++j){
ciur[i*j]=1;
}
}
for (int i=2;i<=a;++i){
if (ciur[i]==0){
prime.push_back(i);
}
}
}
int main()
{
int a,b;
fin>>a>>b;
defciur(a);
int cnt=0;
std::deque<std::pair<int,int>> divnrdiv;
for (auto i:prime){
int temp=0;
while(a%i==0){
temp++;
a=a/i;
}
divnrdiv.push_back({i,temp});
}
uint64_t ans=1;
while (!divnrdiv.empty()){
int temp=pow(std::get<0>(divnrdiv[0]),(std::get<1>(divnrdiv[0]))*b+1);
//std::cout<<std::get<1>(divnrdiv[0])+1;
temp-=1;
temp=temp/(std::get<0>(divnrdiv[0])-1);
ans=ans*temp;
divnrdiv.pop_front();
}
fout<<ans;
return 0;
}