#include <bits/stdc++.h>
using namespace std;
template <class T>
bool umin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool umax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
set<int> avl;
int arr[300009], n, k;
int tap(int l, int r) {
  if (l > r) return 0;
  __typeof((avl).begin()) it = avl.lower_bound(l);
  if (it == avl.end()) return 0;
  return (*it <= r);
}
bool ok(int x) {
  avl.clear();
  avl.insert(0);
  for (int i = 1; i <= n; i++) {
    int pos = lower_bound(arr + 1, arr + n + 1, arr[i] - x) - arr;
    if (tap(pos - 1, i - k)) {
      avl.insert(i);
      if (i == n) return 1;
    }
  }
  return 0;
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) scanf("%d", arr + i);
  sort(arr + 1, arr + n + 1);
  int st = 0, en = arr[n] - arr[1];
  while (st + 1 < en) {
    int mid = (st + en) >> 1;
    if (ok(mid))
      en = mid;
    else
      st = mid;
  }
  if (ok(st))
    printf("%d\n", st);
  else
    printf("%d\n", en);
  return 0;
}
