#include using namespace std; #include using namespace atcoder; using ll = long long; using vi = vector; using vvi = vector>; using pii = pair; #define rep(i, n) for (int i = 0; i < (int)(n); ++i) #define repr(i, n) for (int i = (int)(n - 1); i >= 0; --i) using mint = modint1000000007; int main() { int n, k; cin >> n >> k; vi a(n); rep(i, n) cin >> a[i]; map mp; for (int x : a) { for (int k = 2; k * k <= x; k++) { if (x % k == 0) { int c = 0; while (x % k == 0) { x /= k; c++; } mp[k].push_back(c); } } if (x > 0) mp[x].push_back(1); } mint r = 1; for (auto [p, cnt] : mp) { sort(cnt.begin(), cnt.end(), greater()); int m = 0; rep(i, min(k, (int)cnt.size())) m += cnt[i]; r *= mint(p).pow(m); } cout << r.val() << endl; return 0; }