#include #include #include #include #include using namespace std; vector compute_primes(int n, long long a[]) { set s; for (int ni = 0; ni < n; ++ni) { long long x = a[ni]; for (int p = 2; p * p <= x; ++p) { if (x % p == 0) { s.insert(p); while (x % p == 0) { x /= p; } } } if (x > 1) { s.insert(x); } } return vector(s.begin(), s.end()); } int main() { int n, k; long long a[1000]; vector primes; vector> factors; long long r = 1; cin >> n >> k; for (int ni = 0; ni < n; ++ni) { cin >> a[ni]; } primes = compute_primes(n, a); factors.resize(primes.size()); for (int ni = 0; ni < n; ++ni) { long long x = a[ni]; for (size_t i = 0; i < primes.size(); ++i) { factors[i].push_back(0); while (x % primes[i] == 0) { ++factors[i].back(); x /= primes[i]; } } } for (size_t i = 0; i < primes.size(); ++i) { sort(factors[i].begin(), factors[i].end()); for (int j = 0; j < min(k, int(factors[i].size())); ++j) { for (int x = 0; x < factors[i][factors[i].size() - 1 - j]; ++x) { r = r * primes[i] % 1000000007; } } } cout << r << endl; return 0; }