#include<stdio.h>
#include<string.h>
FILE *fin=fopen("factoriale.in","r");
FILE *fout=fopen("factoriale.out","w");
int 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};
int exp[30],rez[200],a[200],n,k,i,j,p,x;
void X_mic(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;
}
void X_mare(int A[],int la, int B[],int lb){
int i, j, t, C[200];
memset(C, 0, sizeof(C));
for(i = 1; i <= la; i++){
for(t=0, j=1; j <= lb || 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));
}
int main(){
fscanf(fin,"%d %d",&n,&k);
for(i=1;i<=n;i++){
fscanf(fin,"%d",&x);
for(j=1;prim[j]<=x;j++){
p=prim[j];
while(p<=x){
exp[j]+=x/p;
p*=p;
}
}
}
for(i=1;i<=25;i++){
if(exp[i]%k>0){
exp[i]=k-( exp[i]%k );
}
else exp[i]=0;
}
rez[1]=1;
rez[0]=1;
for(i=1;i<=25;i++){
if(exp[i]!=0){
if(prim[i]>=10){
a[0]=2;
a[1]=prim[i]%10;
a[2]=prim[i]/10;
}
else{
a[0]=1;
a[1]=prim[i];
}
for(p=2;p<=exp[i];p++){
X_mic(a,prim[i]);
}
X_mare(rez,rez[0],a,a[0]);
memset(a,0,sizeof(a));
}
}
for(i=rez[0];i>=1;i--){
fprintf(fout,"%d",rez[i]);
}
return 0;
}