#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int pow_mod(ll x, ll n, int M) { ll ans = 1; for (; n; n>>=1) { if (n & 1) ans = ans * x % M; x = x * x % M; } return ans; } int main() { int N, K; cin >> N >> K; vector a(N); for (int i = 0; i < N; i++) cin >> a[i]; vector ps; for (int x: a) { for (int p = 2; p * p <= x; p++) if (x % p == 0) { ps.push_back(p); for (; x % p == 0; x /= p); } if (x > 1) ps.push_back(x); } sort(ps.begin(), ps.end()); ps.erase(unique(ps.begin(), ps.end()), ps.end()); int ans = 1; for (int p: ps) { vector b(N); for (int i = 0; i < N; i++) for (int x = a[i]; x % p == 0; x /= p) b[i]++; sort(b.begin(), b.end()); reverse(b.begin(), b.end()); int sum = 0; for (int i = 0; i < K; i++) sum += b[i]; ans = (ll)ans * pow_mod(p, sum, MOD) % MOD; } cout << ans << endl; }