fun main(args: Array<String>) {
    val (n, m) = readLine()!!.split(" ").map { it.toInt() }

    if (m <= n) {
        print(0)
        return
    }
    val input = readLine()!!.split(" ").map { it.toInt() }

    // 1. コマを n 個配置する
    // 2. コマを １つずつ動かした場合に最小コストで m 個の地点を制覇したい

    // 入力を座標順にソート
    val inputSorted = input.sorted()

    // 左隣りとの差分を計算, index との Pair として格納
    val ld = Array(input.size) {Pair(0, 0)}
    ld[0] = Pair(0, 0)

    for (i in 1 until inputSorted.size) {
        val distance = inputSorted[i] - inputSorted[i - 1]
        ld[i] = Pair(i, distance)
    }

    // 距離の値を元にしてインデックスソート
    val ldSorted = ld.sortedByDescending { it.second }

    // 置き場所を決定
    val startPosIndex = Array(n) {0}
    startPosIndex[n-1] = 0
    for (i in 0 until n-1) {
        startPosIndex[i] = ldSorted[i].first
    }

    // 置き場所を決めた場合の移動コストを計算
    // それぞれ，隣のスタート位置につくまでの移動コストを計算
    var cost = 0
    val startPosIndexSorted = startPosIndex.sorted()

    for (i in 0 until startPosIndexSorted.size) {

        if (i == startPosIndexSorted.size-1) {
            cost += inputSorted[inputSorted.lastIndex] - inputSorted[startPosIndexSorted[i]]
        } else {
            // 隣だったら0 になるので OK
            cost += inputSorted[startPosIndexSorted[i + 1] - 1] - inputSorted[startPosIndexSorted[i]]
        }
    }
    print(cost)
}