#include <stdio.h>
#include <assert.h>
#include <algorithm>

using namespace std;

typedef long long ll;

#define rep(i, n) for(int i = 0; i < n; i++)

ll d[1111];
ll t[1111][1111];
ll dp[1111][1111];

int mind(ll* pre, int b, int l, int g) {
  ll mm = (ll)1 << 60;
  int mb = -1;
  for(int i = b; i <= l; i++) {
    if(mm > pre[i] + t[i][g]) {
      mm = pre[i] + t[i][g];
      mb = i;
    }
  }
  return mb;
}

void step_dfs(int b, int l, int mb, int ml, ll* pre, ll* nex) {
  if(b > l) {return;}
  int m = (b + l) / 2;
  int w = mind(pre, mb, ml, m);
  assert(w != -1);
  nex[m] = pre[w] + t[w][m];
  step_dfs(b, m - 1, mb, w, pre, nex);
  step_dfs(m + 1, l, w, ml, pre, nex);
}

void step(ll* pre, ll* nex, int n) {
  step_dfs(0, n, 0, n, pre, nex);
}

int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  if(m > n) {
    m = n;
  }
  rep(i, n) {
    scanf("%lld", d + i);
  }
  sort(d, d + n);
  rep(i, n) {
    rep(j, n) {
      t[i][j] = 0;
    }
  }
  rep(k, n * 2 - 1) {
    int a = k / 2;
    if(k % 2 == 0) {
      t[a][a + 1] = 0;
      for(int i = 1; a - i >= 0 && a + 1 + i <= n; i++) {
        t[a - i][a + 1 + i] = t[a - (i - 1)][a + 1 + (i - 1)] + d[a + i] - d[a - i];
      }
    }
    else {
      t[a][a + 2] = d[a + 1] - d[a];
      for(int i = 1; a - i >= 0 && a + 2 + i <= n; i++) {
        t[a - i][a + 2 + i] = t[a - (i - 1)][a + 2 + (i - 1)] + d[a + 1 + i] - d[a - i];
      }
    }
  }
  dp[0][0] = 0;
  rep(i, n) {
    dp[0][i + 1] = (ll)1 << 60;
  }
  rep(i, m) {
    step(dp[i], dp[i + 1], n);
  }
  printf("%lld\n", dp[m][n]);
}
