#include using namespace std; #define FOR(i,n) for(int i = 0; i < (n); i++) #define sz(c) ((int)c.size()) #define ten(n) ((int)1e##n) using ll = long long; //素数列挙 bool prime[1000001]; //10^6 vector prs; void init_prime() { memset(prime, 1, sizeof(prime)); prime[0] = prime[1] = false; for (int i = 2; i < sizeof(prime); i++) if (prime[i]) for (int j = i * 2; j < sizeof(prime); j += i) prime[j] = false; for (int i = 2; i < sizeof(prime); i++) if (prime[i]) prs.push_back(i); } int a[1000]; int main() { int n, k; cin >> n >> k; FOR(i, n) cin >> a[i]; init_prime(); map> mp; FOR(i, n) { int x = a[i]; for (auto p : prs) { if (p * p > x) break; int cnt = 0; while (x % p == 0) { x /= p; cnt++; } if (cnt) mp[p].push_back(cnt); } if (x > 1) mp[x].push_back(1); } const int MOD = ten(9) + 7; ll ans = 1; for (auto& kv : mp) { auto& v = kv.second; sort(v.rbegin(), v.rend()); int loop = min(k, sz(v)); FOR(i, loop) { FOR(_, v[i]) ans = ans * kv.first % MOD; } } cout << ans << endl; return 0; }