#include <fstream>
using namespace std;
ifstream cin("sandokan.in");
ofstream cout("sandokan.out");
int cnt=0,t=0,nr=1;
int ciur[5005];
int prim[5005];
int e1[5005];
int e2[5005];
int e3[5005];
int v[100005];
int f(int a,int b)
{
int sum=0,cb=b;
for(int j=1; j<j+1; j++)
{
if(b>a)
break;
sum+=a/b;
b*=cb;
}
return sum;
}
void E1(int n)
{
for(int i=1; i<=cnt; i++)
{
if(prim[i]<=n)
{
e1[i]=f(n,prim[i]);
e1[0]++;
}
else break;
}
}
void E2(int m)
{
for(int i=1; i<=cnt; i++)
{
if(prim[i]<=m)
{
e2[i]=f(m,prim[i]);
e2[0]++;
}
else break;
}
}
void E3(int k)
{
for(int i=1; i<=cnt; i++)
{
if(prim[i]<=k)
{
e3[i]=f(k,prim[i]);
e3[0]++;
}
else break;
}
}
void prod(int a)
{
for(int i=1; i<=nr; i++)
{
int loc=v[i]*a+t;
v[i]=loc%10;
t=loc/10;
}
while(t>0)
{
nr++;
v[nr]=t%10;
t/=10;
}
}
void comb(int n,int k)
{
///completare euri
E1(n);
E2(n-k);
E3(k);
for(int i=1; i<=cnt; i++)
{
e1[i]=e1[i]-e2[i]-e3[i];
//cout<<e1[i]<<'\n';
}
v[1]=1;
for(int i=1; i<=cnt; i++)
{
while(e1[i]>0)
{
prod(prim[i]);
// cout<<prim[i]<<'\n';
e1[i]--;
}
}
}
int main()
{
for(int i=4; i<=1000; i+=2)
ciur[i]=1;
for(int i=3; i*i<=1000; i+=2)
{
if(ciur[i]==0)
{
for(int j=i*i; j<=1000; j+=2*i)
ciur[j]=1;
}
}
int n,k,alfa;
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>alfa;
}
k=(n-1)%(k-1);
n--;
for(int i=2; i<=n; i++)
{
if(ciur[i]==0)
{
cnt++;
prim[cnt]=i;
}
}
comb(n,k);
for(int i=nr; i>=1; i--)
cout<<v[i];
return 0;
}