1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <bits/stdc++.h>

using namespace std;
typedef unsigned long long ll;

static ll maxValue;
static ll bestValue;
static ll llMaxValue = numeric_limits<ll>::max();

void solution(ll value, vector<int>::iterator it, vector<int>::iterator end)
{
	if (value > bestValue)
	{
		bestValue = value;
	}

	while(it != end)
	{
		if ((llMaxValue / (*it)) < value)
			return;

		ll tempV = value * (*it);
		if (tempV > maxValue)
			return;

		solution(tempV, it, end);
		++it;
	}
}


int main()
{
	ios::sync_with_stdio(0);

	maxValue = 372399299269961ULL;
	bestValue = 1;

	vector<int> primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};

	int primesQ = 0;
	cin >> primesQ >> maxValue;

	primes.resize(primesQ);
	for (auto& v: primes)
		cin >> v;

	sort(primes.begin(), primes.end());

	solution(1, primes.begin(), primes.end());

	printf("%llu\n", bestValue);

	return 0;
}