#include <bits/stdc++.h>
using namespace std;
long long n, k;
vector<long long> p;
unordered_map<long long, long long> dp[105][10005];
long long prod, res;
long long power(long long a, long long b) {
  if (b == 0) {
    return 1;
  }
  long long x = power(a, b / 2);
  x *= x;
  x %= 1000000007;
  if (b % 2 == 1) {
    x *= a;
  }
  return x % 1000000007;
}
void doDivisor(long long i) {
  prod = i % 1000000007;
  for (auto j : p) {
    long long br = 0;
    while (i % j == 0) {
      ++br;
      i /= j;
    }
    prod *= dp[br][k][j];
    prod %= 1000000007;
  }
  res += prod;
  if (res >= 1000000007) {
    res -= 1000000007;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> k;
  long long n1 = n;
  for (long long i = 2; i * i <= n; ++i) {
    if (n % i == 0) {
      p.push_back(i);
    }
    while (n % i == 0) {
      n /= i;
    }
  }
  if (n > 1) {
    p.push_back(n);
  }
  n = n1;
  for (auto i : p) {
    long long br = 0;
    while (n1 % i == 0) {
      ++br;
      n1 /= i;
    }
    dp[br][0][i] = 1;
    for (long long l = 1; l <= k; ++l) {
      for (long long j = br; j >= 0; --j) {
        dp[j][l][i] =
            dp[j][l - 1][i] * power(j + 1, 1000000007 - 2) % 1000000007;
        if (j < br) {
          dp[j][l][i] += dp[j + 1][l][i];
          if (dp[j][l][i] >= 1000000007) {
            dp[j][l][i] -= 1000000007;
          }
        }
      }
    }
  }
  res = 0;
  for (long long i = 1; i * i <= n; ++i) {
    if (n % i == 0) {
      doDivisor(i);
      if (i * i != n) {
        doDivisor(n / i);
      }
    }
  }
  cout << res << "\n";
  return 0;
}
