#include <stdio.h>
#include <string.h>
#define DIM 10005
const int p[25]={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 n,k,x,i,j,e,v[25],rez[DIM],q[25],aux;
void trans (int nr,int a[DIM])
{
for ( ; nr; nr/=10)
a[++a[0]]=nr%10;
}
void mult (int a[DIM],int b[DIM])
{
int c[DIM];
int i,j,t;
memset(c,0,sizeof(c));
for (i=1; i<=a[0]; ++i)
{
for (t=0, j=1; j<=b[0] || t; ++j, t/=10)
c[i+j-1]=(t+=c[i+j-1]+a[i]*b[j])%10;
if (i+j-2>c[0])
c[0]=i+j-2;
}
memcpy (a,c,sizeof (c));
}
void solve ()
{
int aux1[DIM],aux2[DIM];
int i,put;
rez[0]=rez[1]=1;
for (i=0; i<25; ++i)
{
memset (aux1,0,sizeof (aux1));
memset (aux2,0,sizeof (aux2));
aux1[0]=aux1[1]=1;
trans (p[i],aux2);
for (put=v[i]; put; put/=2)
{
if (put%2==1)
mult (aux1,aux2);
mult (aux2,aux2);
}
mult (rez,aux1);
}
}
void print ()
{
int i;
for (i=rez[0]; i; --i)
printf ("%d",rez[i]);
}
int main()
{
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);
scanf("%d %d",&n,&k);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
for(j=2;j<=x;j++)
{
aux=j;
e=0;
while(aux>1)
{
if(aux%p[e]==0)
while(aux%p[e]==0)
{
q[e]++;
aux=aux/p[e];
}
e++;
}
}
}
i=0;
while(q[i]!=0)
{
if(q[i]%k!=0)
while(q[i]%k!=0)
{
v[i]++;
q[i]++;
}
i++;
}
solve ();
print ();
return 0;
}