#include <bits/stdc++.h>
using namespace std;
const int maxn = 220;
const int mod = 1000000007;
vector<int> g;
void chaifen(long long x);
long long Pow(long long a, long long b);
long long getnum(int x, long long n);
int main() {
  long long n, x, ans;
  scanf("%I64d %I64d", &x, &n);
  chaifen(x);
  ans = 1;
  for (int i = 0; i < g.size(); i++) {
    long long k = getnum(g[i], n);
    ans = ans * Pow(g[i], k) % mod;
  }
  printf("%I64d\n", ans);
  return 0;
}
long long getnum(int x, long long n) {
  long long num = 0;
  while (n >= x) {
    num += n / x;
    n /= x;
  }
  return num;
}
void chaifen(long long x) {
  int k = sqrt(x) + 0.0001;
  for (int i = 2; i <= k; i++) {
    if (x % i == 0) {
      g.push_back(i);
      while (x % i == 0) x /= i;
    }
  }
  if (x != 1) g.push_back(x);
}
long long Pow(long long a, long long b) {
  long long n = 1;
  while (b) {
    if (b % 2) n = n * a % mod;
    a = a * a % mod;
    b /= 2;
  }
  return n;
}
