#include<stdio.h>
#include<math.h>
int n,putere,f[30],v[110],prim[]={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 read()
{
int i;
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);
scanf("%d%d",&n,&putere);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
}
int kinn(int k, int m)
{
long p=k;
int nr=0;
while(m>=p)
{
nr=nr+m/p;
p=p*k;
}
return nr;
}
/*void inmultire()
{
int i,j;
v1[1]=1;
for(j=1;j<=25;j++)
for(i=1;i<=f[i];i++)
{
v1[i]=v1[i]*(prim[j]%10));
}
}*/
void rez()
{
int i,j;
for(i=1;i<=n;i++)//fiecare x
for(j=1;prim[j]<=v[i];j++)//fiecare nr prim <= v[i]
f[j]=f[j]+kinn(prim[j],v[i]);
for(i=1;i<=25;i++)
if(f[i])
if(putere>f[i])
f[i]=putere-f[i];
else
if(f[i]>putere)
{
if(f[i]%putere)
f[i]=((f[i]/putere+1)*putere)-f[i];
else
f[i]=0;
}
else
f[i]=0;
}
void write()
{
int i;
unsigned long long exp,p=1;
for(i=1;i<=25;i++)
if(f[i])
{
exp=pow(prim[i],f[i]);
p=p*exp;
}
printf("%lld",p);
}
int main()
{
read();
rez();
write();
return 0;
}