#include <bits/stdc++.h>
using namespace std;
const int MAXK = 5010;
long long dp[MAXK][MAXK];
const int MAXN = 300010;
long long a[MAXN];
int n, k, ssz, lsz;
long long rec(int n, int l) {
  if (dp[n][l] >= 0) return dp[n][l];
  long long& res = dp[n][l];
  res = 2000000010;
  if (n == 1) {
    if (l == 1) {
      res = a[lsz - 1] - a[0];
    } else {
      res = a[ssz - 1] - a[0];
    }
  } else {
    int s = n - l;
    if (l > 0) {
      res = min(res, rec(n - 1, l - 1) + a[ssz * s + lsz * l - 1] -
                         a[ssz * s + lsz * (l - 1)]);
    }
    if (s > 0) {
      res = min(res, rec(n - 1, l) + a[ssz * s + lsz * l - 1] -
                         a[ssz * (s - 1) + lsz * l]);
    }
  }
  return res;
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 0; i < (int)(n); i++) scanf("%I64d", &a[i]);
  sort(a, a + n);
  int tgrps = k;
  int lgrps = n - k * (n / k);
  ssz = n / k;
  lsz = n / k + 1;
  memset(dp, -1, sizeof dp);
  cout << rec(tgrps, lgrps) << endl;
  return 0;
}
