#include using namespace std; map f(int n){ map go; for(int i = 2 ; i*i <= n ; i++){ int c = 0; while( n % i == 0 ){ c++; n /= i; } if(c) go[i] = c; } if( n != 1 ) go[n] += 1; return go; } int main(){ int N,K; cin >> N >> K; map> S; for(int i = 1 ; i <= N ; i++){ int a; cin >> a; for(auto i : f(a)) S[i.first].push_back(i.second); } long long ans = 1; for( auto i : S ){ sort(i.second.rbegin(),i.second.rend()); if( i.second.size() > K ) i.second.resize(K); int ss = 0; for(auto j : i.second ) ss += j; for(int j = 0 ; j < ss ; j++) ans *= i.first, ans %= (int)1e9+7; } cout << ans << endl; }