#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAXLOG10 10
#define BUFSIZE (256 * 2048)
FILE *fin, *fout;
int p10[MAXLOG10 + 1] = { 0, 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
int rpos;
char rbuf[BUFSIZE];
int wpos;
char wbuf[BUFSIZE];
static inline void initRead()
{
rpos=BUFSIZE-1;
}
static inline char readChar()
{
if(!(rpos=(rpos+1) & (BUFSIZE-1)))
fread(rbuf, 1, BUFSIZE, fin);
return rbuf[rpos];
}
int readInt()
{
int ch, res=0, semn=1;
while(isspace(ch=readChar()));
if(ch=='-')
{
semn=-1;
ch=readChar();
}
do
res=10*res+ch-'0';
while(isdigit(ch=readChar()));
return semn*res;
}
static inline void initWrite()
{
wpos=0;
}
static inline void writeChar(char ch)
{
wbuf[wpos]=ch;
if(!(wpos=(wpos+1) & (BUFSIZE-1)))
fwrite(wbuf, 1, BUFSIZE, fout);
}
void writeInt(int x)
{
int i,cf;
if(x<0)
{
writeChar('-');
x=-x;
}
i=MAXLOG10;
while(p10[i]>x)
i--;
if(i==0)
writeChar('0');
else
do
{
cf='0';
while(p10[i]<=x)
{
x-=p10[i];
cf++;
}
writeChar(cf);
}
while(--i>0);
}
static inline void flushBuf()
{
fwrite(wbuf, 1, wpos, fout);
}
int n, k;
int x[1001], f[60], rez[1000];
int prim[27]= {0, 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, 101};
void descomp(int x)
{
int i, j, k;
for(i=1; i<=26 && prim[i]<=x; i++)
{
j=k=prim[i];
while(k<=x)
{
f[i]+=x/k;
k*=j;
}
}
}
void inmult(int A[], int B)
{
int i, t=0;
for(i=1; i<=A[0] || t; i++, t/=10)
A[i]=(t+=A[i]*B)%10;
A[0]=i-1;
}
int main()
{
fin=fopen("factoriale.in","r");
fout=fopen("factoriale.out","w");
int i, j;
initRead();
n=readInt();
k=readInt();
rez[1]=rez[0]=1;
for(i=1; i<=n; i++)
{
x[i]=readInt();
descomp(x[i]);
}
for(i=1; i<=26; i++)
{
if(f[i]%k!=0)
for(j=f[i]%k; j<k; j++)
inmult(rez,prim[i]);
}
initWrite();
for(i=rez[0]; i>=1; i--)
writeInt(rez[i]);
writeChar('\n');
fclose(fin);
flushBuf();
fclose(fout);
return 0;
}