#include <iostream>
using namespace std;
int n, c;
int find(int d, int p[]) {
int t = p[0], count = 1;
for (int i = 1; i < n; i++) {
if ((p[i] - t) >= d) {
t = p[i];
count++;
}
}
if (count >= c)
return 1;
else
return 0;
}
int cows(int p[]) {
if (c == 2)
return p[n - 1] - p[0];
int i = 0;
int ans;
int l = 0, r = 2 * p[n - 1] / (c - 1);
while (l <= r) {
int d = (l + r) / 2;
if (find(d, p)) {
ans = d;
l = d + 1;
} else {
r = d - 1;
}
}
return ans;
}
void merge_sort(int arr[], int len) {
int *a = arr;
int *b = (int *) malloc(len * sizeof(int));
int seg, start;
for (seg = 1; seg < len; seg += seg) {
for (start = 0; start < len; start += seg + seg) {
int low = start, mid = min(start + seg, len), high = min(start + seg + seg, len);
int k = low;
int start1 = low, end1 = mid;
int start2 = mid, end2 = high;
while (start1 < end1 && start2 < end2)
b[k++] = a[start1] < a[start2] ? a[start1++] : a[start2++];
while (start1 < end1)
b[k++] = a[start1++];
while (start2 < end2)
b[k++] = a[start2++];
}
int *temp = a;
a = b;
b = temp;
}
if (a != arr) {
int i;
for (i = 0; i < len; i++) {
//cout << b[i] << endl;
b[i] = a[i];
}
b = a;
}
free(b);
}
int main() {
cin >> n >> c;
int p[n];
for (int i = 0; i < n; i++) {
cin >> p[i];
}
merge_sort(p, n);
cout << cows(p);
return 0;
}