#include <iostream>
#include <vector>
#include <queue>
#include <unordered_set>
using namespace std;
const int INF=(1<<31)-1;
int N, K;
vector<long long> primes;
priority_queue<int> pq;
unordered_set<int> us;
void solve(long long n) {
for(auto &prime:primes) {
long long next=n*prime;
if(next>INF)
return;
if(pq.size()==N) {
if(pq.top()<next)
return;
if(us.find(next)==us.end())
pq.pop();
}
if(us.find(next)==us.end()) {
pq.push(next);
us.insert(next);
solve(next);
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin>>K>>N;
primes.resize(K);
for(auto &prime:primes) {
cin>>prime;
}
solve(1);
cout<<pq.top();
return 0;
}
#include <iostream>
#include <queue>
using namespace std;
int a[100005];
int main() {
int k, n;
cin >> k >> n;
for (int i = 0; i < k; i++) {
cin >> a[i];
}
priority_queue<long long, vector<long long>, greater<long long>> pq;
for (int i = 0; i < k; i++)
pq.push(a[i]);
for (int i = 0; i < n - 1; i++) {
long long t = pq.top();
pq.pop();
for (int j = 0; j < k; j++) {
pq.push(a[j] * t);
if (t % a[j] == 0) break;
}
}
cout << pq.top() << endl;
}