```go
package main
import (
"bufio"
"container/heap"
"fmt"
"os"
"sort"
)
type Item struct {
val int64
idx int
}
type Int64Heap []Item
func (h Int64Heap) Len() int { return len(h) }
func (h Int64Heap) Less(i, j int) bool { return h[i].val < h[j].val }
func (h Int64Heap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
func (h *Int64Heap) Push(x interface{}) {
*h = append(*h, x.(Item))
}
func (h *Int64Heap) Pop() interface{} {
old := *h
n := len(old)
x := old[n-1]
*h = old[0 : n-1]
return x
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var K, N int
fmt.Fscan(in, &K, &N)
t := make([]int, N)
for i := 0; i < N; i++ {
fmt.Fscan(in, &t[i])
}
sort.Ints(t)
if K == 0 {
fmt.Println(0)
return
}
M := N - 1
d := make([]int64, M)
for i := 0; i < M; i++ {
d[i] = int64(t[i+1] - t[i])
}
left := make([]int, M)
right := make([]int, M)
for i := 0; i < M; i++ {
left[i] = i - 1
right[i] = i + 1
}
right[M-1] = -1
h := &Int64Heap{}
heap.Init(h)
for i := 0; i < M; i++ {
heap.Push(h, Item{d[i], i})
}
var ans int64 = 0
for k := 0; k < K; k++ {
var item Item
for {
item = heap.Pop(h).(Item)
if item.val == d[item.idx] {
break
}
}
idx := item.idx
ans += d[idx]
l := left[idx]
r := right[idx]
if l != -1 {
right[l] = r
}
if r != -1 {
left[r] = l
}
if l != -1 && r != -1 {
newVal := d[l] + d[r] - d[idx]
d[idx] = newVal
left[idx] = left[l]
right[idx] = right[r]
if left[l] != -1 {
right[left[l]] = idx
}
if right[r] != -1 {
left[right[r]] = idx
}
heap.Push(h, Item{newVal, idx})
} else {
d[idx] = -1
}
}
fmt.Println(ans)
}
```