#include <bits/stdc++.h>
using namespace std;
int dep = 0;
inline long long phi(long long x) {
  long long ret = x;
  for (long long i = 2; i * i <= x; i++) {
    if (x % i == 0) {
      while (x % i == 0) {
        x /= i;
      }
      ret = ret / i * (i - 1);
    }
  }
  if (x > 1) {
    ret = ret / x * (x - 1);
  }
  return ret;
}
long long fk(long long n, long long k) {
  dep++;
  printf("%I64d %I64d\n", n, k);
  if (dep > 100) {
    return 1;
  }
  if (n == 1) return 1;
  if (k == 1) {
    return phi(n);
  }
  if (k % 2 == 0) {
    return fk(n, k - 1);
  } else {
    return phi(fk(n, k - 2));
  }
}
int main() {
  long long n, k;
  scanf("%I64d %I64d", &n, &k);
  long long ans = n;
  for (long long i = 1; i <= (k + 1) / 2; i++) {
    if (ans == 1) break;
    ans = phi(ans);
  }
  printf("%I64d\n", ans % 1000000007);
  return 0;
}
