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