#define _CRT_SECURE_NO_WARNINGS // #define _GLIBCXX_DEBUG #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define rep(i,n) for (int i = 0; i < (int)(n); i++) #define all(c) begin(c), end(c) using vi = vector; using vii = vector < vector>; vector g; pair, vector> primeFactors(ll n) { vector p, e; ll m = n; for (ll i = 2; i*i <= n; i++) { if (m%i != 0) continue; int c = 0; while (m%i == 0) c++, m /= i; p.push_back(i); e.push_back(c); } if (m > 1) { p.push_back(m); e.push_back(1); } return make_pair(p, e); } ll modpow(ll x, ll y, ll m) { if (y == 0) return 1; ll res = modpow(x, y / 2, m); return res * res % m * (y & 1 ? x : 1) % m; } int main() { int n, k; while (cin >> n >> k) { map> cnt; for (size_t i = 0; i < n; i++) { int x; cin >> x; vector p, e; tie(p, e) = primeFactors(x); for (size_t j = 0; j < p.size(); j++) { cnt[p[j]].push_back(e[j]); } } ll ans = 1; for (auto &e : cnt) { sort(e.second.rbegin(), e.second.rend()); int p = e.first; for (size_t i = 0; i < min(k, (int)e.second.size()); i++) { ll mod = 1e9 + 7; ans *= modpow(p, e.second[i], mod); ans %= mod; } } cout << ans << endl; } }