#include <cstdio>
#include <algorithm>
using namespace std;
const int maxl = 100010;
int a[maxl];
int N, M;
inline bool condition(int d)
{
int pr = 0;
for (int i = 1; i < M; ++i) { //第一次循环可看作是找1 ,2两头牛的距离,第M - 1 次寻找M - 1 和第M头牛之间的距离
int ne = pr + 1;
while (ne < N && a[ne] - a[pr] < d) ++ne;
if (ne == N) return false; //要符合当前距离,但是牛舍“不够用了”,距离偏大
pr = ne;
}
return true;
}
int main()
{
while (scanf("%d%d", &N, &M) != EOF) {
int maxv = 0;
for (int i = 0; i < N; ++i) {
scanf("%d", &a[i]);
if (a[i] > maxv) maxv = a[i];
}
sort(a, a + N);
//二分
int lp = 0, rp = maxv;
while (rp - lp > 1) {
int mid = (lp + rp) / 2;
if (condition(mid)) lp = mid;
else rp = mid;
}
printf("%d\n", lp);
}
return 0;
}