//题意:N间牛舌小屋在一条直线上但是他的M头牛对小屋不满意经常互相攻击。
//因此决定吧每头牛放在距离其他牛尽可能远的牛舍
//思路:就是最大化最近的两头牛之间的距离
//用贪心算法将第i头牛放在xj的话那么第I+1投牛满足xJ+d<=xk
//对于X头牛金星排序最多进行一次处理
//因此决定吧每头牛放在距离其他牛尽可能远的牛舍
//思路:就是最大化最近的两头牛之间的距离
//用贪心算法将第i头牛放在xj的话那么第I+1投牛满足xJ+d<=xk
//对于X头牛金星排序最多进行一次处理
//524K 94MS
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX_N 100005
int N,M;
int x[MAX_N];
bool C(int d){
int last = 0;
for (int i=1;i<M;++i)//安排M头牛
{
int crt = last+1;
while(crt<N&&x[crt]-x[last]<d)
crt++;
if (crt==N)
return false;
last = crt;
}
return true;
}
int main(){
scanf("%d %d",&N,&M);
int lb=0,ub = 0;
for (int i=0;i<N;++i){
scanf("%d",&x[i]);
if (x[i]>ub)
ub = x[i];
}
sort(x,x+N);
while(ub-lb>1){
int mid = (lb+ub)/2;
if (C(mid))
lb = mid;
else
ub = mid;
}
printf("%d\n",lb);
return 0;
}