#include <bits/stdc++.h>
using namespace std;
long long val;
int visid;
const int mod = 1e9 + 7;
long long dp[60][10005];
long long Inv[100];
int vis[60][10005];
long long fp(long long b, long long p) {
  if (p == 0) return 1;
  long long tmp = fp(b, p / 2);
  if (p % 2) return (((tmp * tmp) % mod) * b) % mod;
  return (tmp * tmp) % mod;
}
long long solve(int cur, int k) {
  if (k == 0) return fp(val, cur);
  long long &ret = dp[cur][k];
  if (vis[cur][k] == visid) return ret;
  vis[cur][k] = visid;
  ret = 0;
  for (int i = 0; i <= cur; i++) {
    ret += solve(i, k - 1) * Inv[cur + 1] % mod;
    ret %= mod;
  }
  return ret;
}
long long n, ans = 1;
int k;
void go(long long x) {
  int cnt = 0;
  while (n % x == 0) {
    cnt++;
    n /= x;
  }
  visid++;
  val = x;
  ans *= solve(cnt, k);
  ans %= mod;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  for (int i = 0; i <= 60; i++) Inv[i] = fp(i, mod - 2);
  cin >> n >> k;
  long long x = 2;
  while (x * x <= n) {
    if (n % x == 0) go(x);
    x++;
  }
  if (n != 1) go(n);
  cout << ans << endl;
  return 0;
}
