#include <bits/stdc++.h>
using namespace std;
const int mod = 1000 * 1000 * 1000 + 7;
const int MaxPw = 51;
const int MaxK = 10 * 1000;
long long n, k;
int dp[MaxK + 1][MaxPw][MaxPw];
int inv[MaxPw + 1];
int sm[MaxPw][MaxPw];
int getSum(int beta, int l, int r) {
  int tmp = sm[beta][r];
  if (l != 0) {
    tmp -= sm[beta][l - 1];
    if (tmp < 0) tmp += mod;
  }
  return tmp;
}
int getPow(int a, int n) {
  if (n == 0) return 1;
  if (n % 2 == 0) {
    int tmp = getPow(a, n / 2);
    return (tmp * 1ll * tmp) % mod;
  } else {
    return (a * 1ll * getPow(a, n - 1)) % mod;
  }
}
vector<pair<long long, int> > pws;
long long solve(long long x) {
  vector<int> newPws;
  long long tempX = x;
  for (int i = 0; i < pws.size(); ++i) {
    long long div = pws[i].first;
    int cur = 0;
    while (tempX % div == 0) {
      tempX /= div;
      cur++;
    }
    newPws.push_back(cur);
  }
  long long res = x % mod;
  for (int i = 0; i < pws.size(); ++i) {
    res = (res * 1ll * dp[k][newPws[i]][pws[i].second]) % mod;
  }
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> k;
  if (n == 1) {
    cout << 1 << endl;
    return 0;
  }
  for (int i = 1; i <= MaxPw; ++i) {
    inv[i] = getPow(i, mod - 2);
  }
  for (int i = 0; i < MaxPw; ++i) dp[0][i][i] = 1;
  for (int beta = 0; beta < MaxPw; ++beta)
    for (int alpha = 0; alpha < MaxPw; ++alpha) {
      sm[beta][alpha] = dp[0][beta][alpha];
      if (alpha > 0) {
        sm[beta][alpha] = sm[beta][alpha] + sm[beta][alpha - 1];
        if (sm[beta][alpha] >= mod) sm[beta][alpha] -= mod;
      }
    }
  for (int curK = 1; curK <= k; ++curK) {
    for (int alpha = 0; alpha < MaxPw; ++alpha)
      for (int beta = 0; beta <= alpha; ++beta) {
        dp[curK][beta][alpha] =
            (inv[alpha + 1] * 1ll * getSum(beta, beta, alpha)) % mod;
      }
    for (int beta = 0; beta < MaxPw; ++beta)
      for (int alpha = 0; alpha < MaxPw; ++alpha) {
        sm[beta][alpha] = dp[curK][beta][alpha];
        if (alpha > 0) {
          sm[beta][alpha] = sm[beta][alpha] + sm[beta][alpha - 1];
          if (sm[beta][alpha] >= mod) sm[beta][alpha] -= mod;
        }
      }
  }
  long long tempN = n;
  for (long long i = 2; i * i <= tempN; ++i) {
    if (n % i == 0) {
      int cur = 0;
      while (tempN % i == 0) {
        cur++;
        tempN /= i;
      }
      pws.push_back({i, cur});
    }
  }
  if (tempN != 1) {
    pws.push_back({tempN, 1});
  }
  long long res = 0;
  for (long long i = 1; i * i <= n; ++i) {
    if (n % i == 0) {
      res = (res + solve(i)) % mod;
      if (n / i != i) {
        res = (res + solve(n / i)) % mod;
      }
    }
  }
  res = res % mod;
  cout << res << endl;
  return 0;
}
