#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
bool check(int mid,int a[],int n,int m){
int cnt = 1;
int cur = a[0];
for(int i =1;i<n;i++){//从第二头牛开始放
if(a[i]-cur>=mid){
cnt++;//放下则数量加一
cur = a[i];//如果放下,则将当前的牛栏作为初始继续往后找可以放的下的
}
}
if(cnt>=m){//在给定的值下能够放下的牛的个数大于m,则说明给的值小了
return true;
}
return false;
}
int main(){
int a[100000],n,m;
cin>>n>>m;
for(int i =0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int left = 0,right = a[n-1];//二分取值
int mid = left+(right-left)/2;
while(left<=right){
if(check(mid,a,n,m)){
left = mid + 1;
}
else{
right = mid - 1;
}
mid = left+(right-left)/2;
}
cout<<right<<endl;
}