/*
题意:有n个牛棚,给出他们的位置,有m头牛,安排一种方案,使得相邻牛之间最小距离最大。
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#define range(i,a,b) for (int i=a;i<=b;i++)
using std::cin;
using std::cout;
using std::sort;
// namespace std has "left" and "right"
// if you use them as global variables,there will be an error
const int maxn = 100000;
int pos[maxn+1];
int left,right;
int n,m;
bool check(int val)
{
int ans(1);
int last(1);
range(c,2,n)
if (pos[c]-pos[last]>=val)
{
last = c;
ans++;
}
return ans >= m;
}
int main()
{
cin>>n>>m;
range(i,1,n)
{
scanf("%d",&pos[i]);
}
sort(pos+1,pos+1+n);
left = 0;
right = pos[n] - pos[1];
range(c,1,60)//i am lazy
{
int mid = (right + left) >> 1;
if (check(mid))
{
left = mid;
}
else
{
right = mid;
}
}
cout<<(left+right)/2;
return 0;
}