#define _CRT_SECURE_NO_WARNINGS #define _USE_MATH_DEFINES #define _SCL_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAX_MOD 1000000007 #define REP(i,n) for(int i = 0;i < n;++i) using namespace std; int sosuu_counter[110000][1000] = {}; map hogee; int main() { int n, k; scanf("%d%d", &n, &k); REP(i, n) { long long n; cin >> n; int cnt = 2; while (true) { if (n % cnt == 0) { sosuu_counter[cnt][i]++; n /= cnt; } else { cnt++; if (cnt > sqrt(n)) { hogee[n]++; goto ok; } } } ok:; } long long ans = 1; for (auto itr = hogee.begin();itr != hogee.end();++itr) { int a = itr->first; int b = itr->second; for (int i = 0;i < b&&i < k;++i) { ans = (ans * a)%MAX_MOD; } } for (int i = 2;i <= 100000;++i) { sort(sosuu_counter[i], sosuu_counter[i] + 1000,greater()); int counter = 0; for (int q = 0;q < k;++q) { counter += sosuu_counter[i][q]; } for (int q = 0;q < counter;++q) { ans = (ans*i) % MAX_MOD; } } cout << ans % MAX_MOD << endl; }