#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5, K = 5005, INF = 1e9;
int dp[2][K][2], t[N], a[N], b[N];
void upd(int &x, int y) { x = min(x, y); }
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int k, n;
  cin >> k >> n;
  for (int i = 0; i < n; i++) {
    cin >> t[i];
    a[i] = i;
  }
  sort(t, t + n);
  sort(a, a + n - 1,
       [=](int x, int y) { return t[x + 1] - t[x] < t[y + 1] - t[y]; });
  set<int> st;
  for (int i = 0; i < 2 * k - 1; i++) {
    st.insert(t[a[i]]);
    st.insert(t[a[i] + 1]);
  }
  int m = 0;
  for (int i : st) {
    b[m++] = i;
  }
  m--;
  for (int i = 0; i < m; i++) {
    b[i] = b[i + 1] - b[i];
  }
  for (int i = 0; i <= k; i++) dp[0][i][0] = dp[0][i][1] = INF;
  dp[0][0][0] = 0;
  for (int i = 0; i < m; i++) {
    int p = i & 1;
    for (int j = 0; j <= k; j++) {
      dp[p ^ 1][j][0] = dp[p ^ 1][j][1] = INF;
    }
    for (int j = 0; j <= k; j++) {
      upd(dp[p ^ 1][j][0], dp[p][j][0]);
      upd(dp[p ^ 1][j + 1][1], dp[p][j][0] + b[i]);
      upd(dp[p ^ 1][j][0], dp[p][j][1]);
    }
  }
  cout << min(dp[m & 1][k][0], dp[m & 1][k][1]);
  return 0;
}
