#20未知原因WA
#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
#include<map>
using namespace std;
const int N=1e6+86;
const int F=2911;
const long double nb=-1e10;
long long n;
long long k;
map<long long ,bool> mp;
long long ans=0;
long long num=0;
long long cnt=0;
void fn(){
ans=1;
num=0;
for(long long i=2;i*i*i<=n;i++){
num=pow(i,k);
if(num>n||num<0){
break;
}
if(mp[num]==0){
num=num;
if(num<=n){
ans++;
mp[num]=1;
}else break;
}
while(num<=n/i){
num=num*i;
if(mp[num]==0){
if(num<=n){
ans++;
mp[num]=1;
}else break;
}
}
}
cout<<ans;
}
void fn2(){//k==2的分类
for(long long i=2;i*i*i<=n;i++){
num=i*i*i;
if(num>n||num<=0){
break;
}
if(mp[num]==0){
if(num<=n){
if((long long)sqrtl(num)*sqrtl(num)==num){
cnt++;
}
ans++;
mp[num]=1;
}else break;
}
while(num<=n/i){
num=num*i;
if(num>n||num<0)break;
if(mp[num])continue;
if((long long)sqrtl(num)*sqrtl(num)==num){
cnt++;//完全平方数已经计算过,要减去
}
ans++;
mp[num]=1;
}
}
ans+=sqrtl(n);//完全平方数的个数
cout<<ans-cnt;
}
int main(){
// freopen("power6.in","r",stdin);
// freopen("power.out","w",stdout);
scanf("%lld%lld",&n,&k);
//分类
if(k==1){
printf("%lld",n);
}else if(k>=3){
fn();
}else if(k==2){
fn2();
}
return 0;
}