#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define _int64 long long #define mo 1000000007 map mp; int phi(int n) { int i,mul,nn; if (n==1) return 1; if (mp.find(n)!=mp.end()) return mp[n]; for (i=2;i*i<=n;i++) if (n%i==0) { nn=n; nn/=i; mul=(i-1); while (nn%i==0) { nn/=i; mul*=i; } mp[n]=phi(nn)*mul; return phi(nn)*mul; } mp[n]=n-1; return n-1; } int main() { int n,k,x,i,ans,tmp; mp.clear(); while (scanf("%d%d",&n,&k)!=EOF) { if (n==1) { printf("1\n"); continue; } if (k>=3) { printf("0\n"); continue; } if (k==2) { printf("1\n"); continue; } ans=0; x=phi(n); for (i=1;i*i<=n;i++) if (n%i==0) { tmp=n/i; ans+=(_int64)phi(i)*phi(tmp)%mo; ans%=mo; if (i!=tmp) { ans+=(_int64)phi(i)*phi(tmp)%mo; ans%=mo; } } printf("%d\n",ans); //cout<