#include<iostream>
#include<algorithm>
using namespace std;
int n,m,str[100005];
bool C(int d)
{
int last=0;//初始化数组第一个牛棚下标
for(int i=1;i<m;i++)
{
int crt=last+1;//初始化第二个合法牛棚
while(crt<n&&str[crt]-str[last]<d)//不满足则向后移
{
crt++;
}
if(crt==n)
return false;
last=crt;//更新
}
return true;
}
void solve ()
{
sort(str,str+n);//排序
int lb=0,ub=10000000;
while(ub-lb>1)//二分
{
int mid=(lb+ub)/2;
if(C(mid))lb=mid;
else ub=mid;
}
cout<<lb<<endl;
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>str[i];
}
solve();
return 0;
}