#include <bits/stdc++.h>
namespace ZDY {
#pragma GCC optimize(3)
template <class T>
__inline__ __attribute__((always_inline)) T ABS(T x) {
  return x > 0 ? x : -x;
}
template <class T>
__inline__ __attribute__((always_inline)) T MAX(T x, T y) {
  return x > y ? x : y;
}
template <class T>
__inline__ __attribute__((always_inline)) T MIN(T x, T y) {
  return x < y ? x : y;
}
template <class T>
__inline__ __attribute__((always_inline)) T GCD(T x, T y) {
  return y ? GCD(y, x % y) : x;
}
template <class T>
__inline__ __attribute__((always_inline)) void SWAP(T &x, T &y) {
  T t = x;
  x = y;
  y = t;
}
}  // namespace ZDY
using namespace ZDY;
using namespace std;
namespace IO {
const int str = 1 << 20;
static char in_buf[str], *in_s, *in_t;
bool __ = 0;
__inline__ __attribute__((always_inline)) char gc() {
  return (in_s == in_t) &&
             (in_t = (in_s = in_buf) + fread(in_buf, 1, str, stdin)),
         in_s == in_t ? EOF : *in_s++;
}
__inline__ __attribute__((always_inline)) void in(string &ch) {
  ch.clear();
  if (__) return;
  char c;
  while ((c = gc()) != EOF && isspace(c))
    ;
  if (c == EOF) {
    __ = 1;
    return;
  }
  ch += c;
  while ((c = gc()) != EOF && !isspace(c)) ch += c;
  if (c == EOF) __ = 1;
}
__inline__ __attribute__((always_inline)) void in(char &ch) {
  if (__) return;
  char c;
  while ((c = gc()) != EOF && isspace(c))
    ;
  if (c == EOF)
    __ = 1;
  else
    ch = c;
}
__inline__ __attribute__((always_inline)) void in(char *ch) {
  *ch = '\0';
  if (__) return;
  char c;
  while ((c = gc()) != EOF && isspace(c))
    ;
  if (c == EOF) {
    __ = 1;
    return;
  }
  *ch = c;
  ch++;
  while ((c = gc()) != EOF && !isspace(c)) *ch = c, ch++;
  if (c == EOF) __ = 1;
  *ch = '\0';
}
template <typename T>
__inline__ __attribute__((always_inline)) void in(T &x) {
  if (__) return;
  char c = gc();
  bool f = 0;
  while (c != EOF && (c < '0' || c > '9')) f ^= (c == '-'), c = gc();
  if (c == EOF) {
    __ = 1;
    return;
  }
  x = 0;
  while (c != EOF && '0' <= c && c <= '9') x = x * 10 + c - 48, c = gc();
  if (c == EOF) __ = 1;
  if (f) x = -x;
}
template <typename T, typename... arr>
__inline__ __attribute__((always_inline)) void in(T &x, arr &...y) {
  in(x), in(y...);
}
const char ln = '\n';
static char out_buf[str], *out_s = out_buf, *out_t = out_buf + str;
__inline__ __attribute__((always_inline)) void flush() {
  fwrite(out_buf, 1, out_s - out_buf, stdout);
  out_s = out_buf;
}
__inline__ __attribute__((always_inline)) void pt(char c) {
  (out_s == out_t) ? (fwrite(out_s = out_buf, 1, str, stdout), *out_s++ = c)
                   : (*out_s++ = c);
}
__inline__ __attribute__((always_inline)) void out(const char *s) {
  while (*s) pt(*s++);
}
__inline__ __attribute__((always_inline)) void out(char *s) {
  while (*s) pt(*s++);
}
__inline__ __attribute__((always_inline)) void out(char c) { pt(c); }
__inline__ __attribute__((always_inline)) void out(string s) {
  for (int i = 0; s[i]; i++) pt(s[i]);
}
template <typename T>
__inline__ __attribute__((always_inline)) void out(T x) {
  if (!x) {
    pt('0');
    return;
  }
  if (x < 0) pt('-'), x = -x;
  char a[50], t = 0;
  while (x) a[t++] = x % 10, x /= 10;
  while (t--) pt(a[t] + '0');
}
template <typename T, typename... arr>
__inline__ __attribute__((always_inline)) void out(T x, arr &...y) {
  out(x), out(y...);
}
}  // namespace IO
using namespace IO;
int n, k, a[300011], b[300011];
priority_queue<int> q;
int main() {
  in(n, k);
  for (int i(1); i <= n; ++i) in(a[i]);
  for (int i(2); i <= n; ++i) q.push(a[i] - a[i - 1]);
  int ans = a[n] - a[1];
  while (--k) ans -= q.top(), q.pop();
  cout << ans << endl;
}
