#include <bits/stdc++.h>

using namespace std;

const int MAX = 200000;

int main() {

  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);

  int n, k;
  int a[MAX];
  cin>>n>>k;
  for(int i = 0 ; i < n ; i++) {
    cin>>a[i];
  }

  if(k == 2)
  {
    int ma = a[0], mi = a[0];
    for(int i = 1 ; i < n ; i++) {
      if(a[i] > ma) ma = a[i];
      if(a[i] < mi) mi = a[i];
    }
    cout<<ma-mi;
  }
  else if(k == 3)
  {
    int ma = a[0], mi = a[0], ma2 = a[1];
    for(int i = 1 ; i < n ; i++) {
      if(a[i] > ma) {
        ma2 = ma;
        ma = a[i];
      }
      else if(a[i] > ma2) ma2 = a[i];

      if(a[i] < mi) mi = a[i];
    }
    cout<<ma+ma2-mi;
  }
  else
  {
    int NumberOfMaxes = k - 2;
    vector<int> Maxes;

    while(NumberOfMaxes) {

      int ma = -1, mai = -1;
      for(int i = 0 ; i < n ; i++) {
        if(a[i] > ma) {
          ma = a[i];
          mai = i;
        }
      }
      a[mai] = -MAX;
      Maxes.push_back(ma);

      NumberOfMaxes--;

    }

    int First = 0, Last = n-1;
    while(true) {

      if(a[First] == -MAX) break;
      First++;

    }

    while(true) {

      if(a[Last] == -MAX) break;
      Last--;

    }

    int x1 = a[0], y1 = a[0], x2 = a[n-1], y2 = a[n-1];

    for(int i = 1 ; i < First ; i++) {
      if(a[i] > y1) y1 = a[i];
      if(a[i] < x1) x1 = a[i];
    }

    for(int i = n-1 ; i > Last ; i--) {
      if(a[i] > y2) y2 = a[i];
      if(a[i] < x2) x2 = a[i];
    }

    int z21 = y2 - x1;
    int z12 = y1 - x2;

    int Resenje = accumulate(Maxes.begin(), Maxes.end(), 0);
    if(z12 > z21) Resenje += z12;
    else Resenje += z21;

    cout<<Resenje;

  }

  return 0;
}