#include<stdio.h>
#define N 102
#define Nmax 102
#define X 50
#define CIF 100
int c[N+2];
int n,k=0,v[X],prez[X],tr[X];
int z[100],dz=1,y[100],dy=1,yy[100],dyy=1;
void genereaza_v(){
int i,j;
c[0]=c[1]=1;
for (i=4;i<=N;i+=2)
c[i]=1;
for (i=3;i<=N;i+=2)
if (c[i]==0)
for(j=i+i;j<=N;j+=i)
c[j]=1;
for (i=1;i<=N;++i)
if (c[i]==0){
++k;
v[k]=i;
}
k=25;
}
void produs1(int c,int dx,int x[CIF]){
int j,minte,t;
minte=0;
for (j=1;j<=dx;++j){
t=c*x[j]+minte;
y[j]=t%10;
minte=t/10;
}
dy=dx;
if (minte>0){
++dy;
y[dy]=minte;
}
}
void produs2(int c,int dx,int x[CIF]){
int j,minte,t;
minte=0;
for (j=1;j<=dx;++j){
t=c*x[j]+minte;
yy[j+1]=t%10;
minte=t/10;
}
dyy=dx;
if (minte>0){
++dyy;
yy[dy+1]=minte;
}
}
void suma(int dx,int x[CIF],int dy,int y[CIF]){
int i,t,minte;
if (dx>dy){
for(i=dy+1;i<=dx;++i)
y[i]=0;
dy=dx;
}
else{
for(i=dx+1;i<=dy;++i)
x[i]=0;
dx=dy;
}
minte=0;
for(i=1;i<=dx;++i){
t=minte+x[i]+x[i];
z[i]=t%10;
minte=t/10;
}
dz=dx;
if (minte>0){
++dz;
z[dz]=minte;
}
}
int main(){
int x[Nmax],i,t,j,xx,c1,c2,r;
unsigned long long s=1;
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);
scanf("%d%d",&n,&t);
for (i=1;i<=n;++i)
scanf("%d",&x[i]);
genereaza_v();
for (j=1;j<=n;++j){
r=x[j];
for (i=1;i<=k;++i){
xx=v[i];
while (r/xx>0){
prez[i]+=r/xx;
xx*=xx;
}
}
}
for (i=1;i<=k;++i)
if (prez[i]%t!=0)
tr[i]=t-prez[i]%t;
y[1]=1;z[1]=1;
for (i=1;i<=k;++i){
if (tr[i]!=0){
/*c1=v[i]%10;
c2=v[i]/10;
for(j=1;j<=tr[i];++j){
for (k=1;k<=dy;++k)
yy[k]=y[k];
produs1(c1,dy,y);
produs2(c2,dyy,yy);
suma(dy,y,dyy,yy);
for (k=1;k<=dz;++k)
y[k]=z[k];
dy=dz;
}*/
s*=v[i];
}
}
printf("%llu",s);
return 0;
}