#include <bits/stdc++.h>
using namespace std;
const long long INF = 1000LL * 1000 * 1000 * 1000 * 1000 * 1000 + 9;
int n, m;
struct elem {
  int x, y;
  int data;
};
int arr[1000005];
elem arr2[1000005];
bool used[1000005];
bool cmp(elem a, elem b) {
  return a.data < b.data || (a.data == b.data && a.x < b.x);
}
long long dpT[3][5003];
int obm;
long long a[24000];
int cnt = 0;
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m;
  obm = min(m - 1, n * 3);
  for (int(i) = 0; (i) < (m); (i)++) {
    cin >> arr[i];
  }
  sort(arr, arr + m);
  for (int(i) = 0; (i) < (m - 1); (i)++) {
    arr2[i].data = arr[i + 1] - arr[i];
    arr2[i].x = i;
    arr2[i].y = i + 1;
  }
  sort(arr2, arr2 + m - 1, cmp);
  set<int> foo;
  for (int(i) = (0); (i) < (obm); (i)++) {
    foo.insert(arr[arr2[i].x]);
    foo.insert(arr[arr2[i].y]);
  }
  for (auto &iter : foo) {
    a[cnt++] = iter;
  }
  for (int(i) = (0); (i) < (3); (i)++) {
    for (int(j) = (0); (j) < (5003); (j)++) {
      dpT[i][j] = INF;
    }
    dpT[i][0] = 0;
  }
  for (int(ptr) = (0); (ptr) < (cnt + 1); (ptr)++) {
    for (int(was) = (0); (was) < (n + 1); (was)++) {
      if (ptr + 1 <= cnt)
        dpT[(ptr + 1) % 3][was] =
            min(dpT[ptr % 3][was], dpT[(ptr + 1) % 3][was]);
      if (ptr + 2 <= cnt)
        dpT[(ptr + 2) % 3][was + 1] =
            min(dpT[ptr % 3][was] + a[ptr + 1] - a[ptr],
                dpT[(ptr + 2) % 3][was + 1]);
    }
  }
  cout << dpT[cnt % 3][n];
  return 0;
}
