春测T295分
#include <bits/stdc++.h>
#define int __int128
using namespace std;
map<int,bool> mp;
int n,k,ans;
template<typename T_>
void read(T_ &x) {
x = 0;
char s = getchar();
bool f = false;
while (s < '0' || '9' < s) { f = s == '-', s = getchar(); }
while ('0' <= s && s <= '9') { x = (x << 3) + (x << 1) + (s - '0'), s = getchar(); }
if (f) x = -x;
}
template<typename T_>
void write(T_ x) {
if (x < 0) putchar('-'), x = -x;
if (9 < x) write(x / 10);
putchar(x % 10 + '0');
}
int qpow(int a,int b){
int res=1;
while(b){
if(b&1)
res=res*a;
a=a*a;
b>>=1;
}
return res;
}
int sqrt(int a){
int l=0,r=a,kkk;
while(l<=r){
int mid=(l+r)/2;
if(mid*mid>a) r=mid-1;
else{
l=mid+1;
kkk=mid;
}
}
return kkk;
}
signed main(){
read(n),read(k);
int kk=k;
while(k<=63&&qpow(2,k)<=n){
if(k==1){
ans+=n;
k++;
break;
}
if(k==2){
ans+=(int)(sqrt(n));
k++;
continue;
}
int nn=1;
while(qpow(nn,k)<=n){
int mm=qpow(nn,k);
if(!mp[mm]&&(mm!=(int)(sqrt(mm))*(int)(sqrt(mm))||kk>2)){
ans++;
mp[mm]=1;
}
nn++;
}
k++;
}
write(ans);
return 0;
}