#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
long A[100010],n;
long k1,k2;
long sep(int x,int y,int k)
{
int mid = x + (y-x)/2;
long i = x,j = y,key = A[mid];
A[mid] = A[x];
while(i < j)
{
while(i < j && A[j] >= key)
j--;
A[i] = A[j];
while(i < j && A[i] < key)
i++;
A[j] = A[i];
}
A[i] = key;
if(i == k) return A[i];
if(i > k) sep(x,i-1,k);
else if(i < k) sep(i+1,y,k);
}
/*bool*/void prime()
{
int m = k2 - k1;
if(m < 2)
{
printf("NO\n");
return;
}
else if(m == 2)
{
printf("YES\n");
printf("%d\n", m);
return ;
}
else if(m > 2)
{
for(int i = 2; i <= int(sqrt(m))+1; i++)
if(m%i == 0)
{
printf("NO\n");
printf("%d\n", m);
return ;
}
printf("YES\n");
printf("%d\n", m);
return;
}
/* int i;
if(m<=1) return false;
for(i=2; i*i<=m; i++)
if(m%i==0)
return false;
return true;*/
}
int main()
{
int k,i;
cin>>n>>k;
for(i = 1; i <= n; i++)
cin>>A[i];
k1 = sep(1,n,k);
k2 = sep(1,n,n-k+1);
prime();
/* int m = k2 - k1;
if(prime())
printf("YES\n");
else
printf("NO\n");
printf("%d\n", m);*/
return 0;
}
***************************************************************************************
void输出是否会有溢出?若在wikioi上,注释部分可AC,而在void函数内输出则WA