#include <fstream>
using namespace std;
ifstream cin ("factoriale.in");
ofstream cout ("factoriale.out");
class Numar_Mare {
private:
long long cifre[1000] , baza = 1e8;
public:
Numar_Mare (int numar) {
cifre[0] = 0;
do cifre[++cifre[0]] = numar % baza;
while (numar /= baza);
}
Numar_Mare &operator *= (const int factor) {
long long transport = 0;
for (int indice = 1 ; indice <= cifre[0] ; indice++ , transport /= baza)
cifre[indice] = (transport += cifre[indice] * factor) % baza;
while (transport) {
cifre[++cifre[0]] = transport % baza;
transport /= baza;
}
return *this;
}
friend ofstream &operator << (ofstream &iesire , const Numar_Mare numar) {
for (int factor = numar.baza / 10 ; factor ; factor /= 10)
if (factor <= numar.cifre[numar.cifre[0]])
iesire << numar.cifre[numar.cifre[0]] / factor % 10;
for (int indice = numar.cifre[0] - 1 ; indice ; indice--)
for (int factor = numar.baza / 10 ; factor ; factor /= 10)
iesire << numar.cifre[indice] / factor % 10;
return iesire;
}
};
pair <int , int> factor[] = {make_pair(2 , 0) , make_pair(3 , 0) , make_pair(5 , 0) , make_pair(7 , 0) , make_pair(11 , 0) , make_pair(13 , 0) , make_pair(17 , 0) , make_pair(19 , 0) , make_pair(23 , 0) , make_pair(29 , 0) , make_pair(31 , 0) , make_pair(37 , 0) , make_pair(41 , 0) , make_pair(43 , 0) , make_pair(47 , 0) , make_pair(53 , 0) , make_pair(59 , 0) , make_pair(61 , 0) , make_pair(67 , 0) , make_pair(71 , 0) , make_pair(73 , 0) , make_pair(79 , 0) , make_pair(83 , 0) , make_pair(89 , 0) , make_pair(97 , 0)};
int main ()
{
int lungime , exponent;
cin >> lungime >> exponent;
for (int indice = 1 , limita ; indice <= lungime ; indice++)
{
cin >> limita;
for (int indice_2 = 0 ; indice_2 < 25 ; indice_2++)
for (int putere = factor[indice_2].first ; putere <= limita ; putere *= factor[indice_2].first)
(factor[indice_2].second += limita / putere) %= exponent;
}
Numar_Mare plus(1);
for (int indice = 0 ; indice < 25 ; indice++)
while (factor[indice].second--)
plus *= factor[indice].first;
cout << plus;
cout.close(); cin.close();
return 0;
}