#include<bits/stdc++.h>
using namespace std;
unordered_map<long long, bool> s;
long long n=0;
long long qpow(long long x, long long y)
{
long long res;
for (res = 1; y > 0; y--)
if ((res *= x) > n)
return n + 1;
return res;
}
int main()
{
long long k;
long long ans=0;
scanf("%lld %lld",&n,&k);
if(k==1)
{
printf("%lld\n",n);
return 0;
}
if(k==2)
{
ans=(long long)sqrtl(n);
}
for(long long i=max(k,3ll);i<=60ll;i++)
{
for(long long j=1,res;(res=qpow(j,i))<=n;j++)
{
if(k!=2||((long long)sqrt(res)*(long long)sqrt(res)!=res))
{
s[res]=1;
}
}
}
ans+=s.size();
printf("%lld\n",ans);
return 0;
}