#include #include #include #include #include #include #include #include #define REP(i,k,n) for(int i=k;i P; map prime_factor(ll n) { map res; for(ll i=2; i*i <= n; i++) { while(n%i == 0) { res[i]++; n /= i; } } if(n != 1) res[n] = 1; return res; } ll mod_pow(ll x, ll n) { ll res = 1; while(n > 0) { if(n & 1) res = res * x % MOD; x = x * x % MOD; n >>= 1; } return res; } int main() { int n, k; cin >> n >> k; vector v(n); map > m; rep(i, n) { cin >> v[i]; map ret = prime_factor(v[i]); map::iterator it; for(it = ret.begin(); it != ret.end(); it++) { m[it->first].push_back(it->second); } } ll ans = 1; map >::iterator it; for(it = m.begin(); it != m.end(); it++) { sort(it->second.begin(), it->second.end(), greater()); int cnt = 0; rep(i, min(int(it->second.size()), k)) { cnt += it->second[i]; } ans *= mod_pow(it->first, cnt); ans %= MOD; } cout << ans << endl; return 0; }