#include<cstdio>#include<cctype>#include<cstring>#include<algorithm>#include<cmath>#include<map>#define rg registertypedeflonglong LL;typedefunsignedint ULL;
template <typename T>inline T max(const T a,const T b){return a>b?a:b;}
template <typename T>inline T min(const T a,const T b){return a<b?a:b;}
template <typename T>inlinevoidmind(T&a,const T b){a=a<b?a:b;}
template <typename T>inlinevoidmaxd(T&a,const T b){a=a>b?a:b;}
template <typename T>inline T abs(const T a){return a>0?a:-a;}
template <typename T>inlinevoidswap(T&a,T&b){T c=a;a=b;b=c;}
template <typename T>inline T gcd(const T a,const T b){if(!b)return a;returngcd(b,a%b);}
template <typename T>inline T lcm(const T a,const T b){return a/gcd(a,b)*b;}
template <typename T>inline T square(const T x){return x*x;};
template <typename T>inlinevoidread(T&x){char cu=getchar();x=0;bool fla=0;while(!isdigit(cu)){if(cu=='-')fla=1;cu=getchar();}while(isdigit(cu))x=x*10+cu-'0',cu=getchar();if(fla)x=-x;}
template <typename T>inlinevoidprinte(const T x){if(x>=10)printe(x/10);putchar(x%10+'0');}
template <typename T>inlinevoidprint(const T x){if(x<0)putchar('-'),printe(-x);elseprinte(x);}
namespace du
{constint MAX=2000000;bool isprime[MAX+1];int n,prime[MAX+1],primesize;LL phi[MAX+1],phi1[MAX+1];inlinevoidgetlist(const LL listsize){memset(isprime,1,sizeof(isprime));isprime[1]=0,phi[1]=1;;for(rg int i=2;i<=listsize;i++){if(isprime[i])prime[++primesize]=i,phi[i]=i-1;for(rg int j=1;j<=primesize&&(LL)i*prime[j]<=listsize;j++){isprime[i*prime[j]]=0;if(i%prime[j]==0){phi[i*prime[j]]=phi[i]*prime[j];break;}phi[i*prime[j]]=phi[i]*(prime[j]-1);}}}inline LL Val(constint x){if(x<=MAX)return phi[x];return phi1[n/x];}voidpre(int ttt){n=ttt;getlist(MAX);for(rg int i=1;i<=MAX;i++)phi[i]+=phi[i-1];for(rg int i=min((int)sqrt(n),n/(MAX+1));i>=1;i--){constint u=n/i;LL res=(LL)u*(u+1)/2;int limit=sqrt(u);for(rg int j=1;j<=limit;j++)res-=Val(u/j);limit++;for(rg int j=1;limit*j<=u;j++)res-=phi[j]*((u/j)-(u/(j+1)));phi1[i]=res;}}}int n,k,part,tot,qz[700001],prime[700001],sq[700001],primesize,sum0[700001],id[700001];inlineintck(constint x){return x<=part?x:tot-n/x+1;}
ULL S[51][51],sum2[700001],sum3[700001];
LL sum1[700001];voidpre(){S[0][0]=1;for(rg int i=1;i<=k;i++)for(rg int j=1;j<=i;j++)S[i][j]=S[i-1][j-1]+j*S[i-1][j];}inline ULL qzktime(int x){ULL ans=0,dq=0;for(rg int i=0;i<=k;i++)for(rg int j=x-i+1;j<=x+1;j++)if(j%(i+1)==0){dq=S[k][i];for(rg int l=x-i+1;l<=x+1;l++)if(j==l)dq*=l/(i+1);else dq*=l;ans+=dq;break;}return ans;}int val[700001];
ULL R[700001],ans,QZ[700001];
ULL pow(ULL x,int y){ULL res=1;for(;y;y>>=1,x=x*x)if(y&1)res*=x;return res;}intmain(){read(n),read(k);du::pre(n),pre();part=sqrt(n);tot=primesize=0;for(rg int i=1;i<=part;i++)id[++tot]=i,sum0[tot]=i-1,sum1[tot]=((((LL)i+1)*i)>>1)-1,sum2[tot]=qzktime(i)-1,sum3[tot]=i-1;id[++tot]=n/part;if(id[tot]!=part)sum0[tot]=id[tot]-1,sum1[tot]=((LL)(((LL)id[tot]+1)*id[tot])>>1)-1,sum2[tot]=qzktime(id[tot])-1,sum3[tot]=id[tot]-1;else tot--;for(rg int i=part-1;i>=1;i--)id[++tot]=n/i,sum0[tot]=id[tot]-1,sum1[tot]=((((LL)id[tot]+1)*id[tot])>>1)-1,sum2[tot]=qzktime(id[tot])-1,sum3[tot]=id[tot]-1;for(rg int i=2;i<=part;i++)if(sum0[i]!=sum0[i-1]){constint limit=i*i;ULL I=pow(i,k);for(rg int j=tot;id[j]>=limit;j--){constint t=ck(id[j]/i);sum3[j]+=sum2[t]-QZ[primesize]-sum0[t]+primesize;sum2[j]-=(sum2[t]-QZ[primesize])*I;sum1[j]-=(sum1[t]-qz[primesize])*i;sum0[j]-=sum0[t]-primesize;}prime[++primesize]=i,sq[primesize]=i*i,qz[primesize]=qz[primesize-1]+i,QZ[primesize]=QZ[primesize-1]+I;}for(rg int i=1;i<=tot;i++)sum1[i]-=sum0[i];//printf("%lld\n",sum1[i]);//sum1為phi的前綴和for(rg int i=1;i<=part;i++)val[i]=n/i,R[i]=sum3[ck(val[i])];//printf("%d %u %lld\n",val[i],R[i],sum1[i]+1);for(rg int i=part+1;i<=tot;i++)val[i]=tot-i+1,R[i]=sum3[ck(val[i])];//printf("%d %u %lld\n",val[i],R[i],sum1[i]+1);for(rg int i=1;i<=part;i++)ans+=(R[i]-R[i+1])*(2*(ULL)du::Val(i)-1);//printf("%lld\n",sum1[i]);for(rg int i=part+1;i<=tot;i++)ans+=(R[i]-R[i+1])*(2*(ULL)du::Val(n/(tot-i+1))-1);print(ans),putchar('\n');return0;}