#include<cstdio>
#include<algorithm>
//二分,很多需要注意的地方
const int Maxn = 1e5;
int stalls[Maxn+5];
int n,c;
int cnt,tmp;
bool Judge(int dis)
{
cnt = 1,tmp = stalls[0];
for(int i = 1; i<n; ++i)
{
if(stalls[i]-tmp>=dis)
{
cnt++;
tmp = stalls[i];
if(cnt>=c)
return true;
}
}
return false;
}
int BinarySearch()
{
int L = 1;
int R = stalls[n-1]-stalls[0];
int mid;
while(L<=R)
{
/*
mid = L + (R-L) >> 1;
错误写法,因为加法的优先级比右移大,所以会出现死循环
若L = 2,R = 3,mid = 1,而不是2,所以死循环了
*/
//正确写法:
mid = L +((R-L)>>1);
if(Judge(mid))
L = mid + 1;
else
R = mid - 1;
}
return L-1;
}
int main()
{
scanf("%d%d",&n,&c);
for(int i = 0; i<n; ++i)
scanf("%d",&stalls[i]);
std::sort(stalls,stalls+n);
printf("%d\n",BinarySearch());
return 0;
}