#include <bits/stdc++.h>
#define int long long
#define fast ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define lg2(n) (63-__builtin_clzll(n))
#define mask(n) (1LL << (n))
#define TASK ""
#define openfile();  if( fopen(TASK".inp", "r")){freopen(TASK".inp", "r", stdin);freopen(TASK".out", "w", stdout);}
#define lc(n) (n << 1)
#define rc(n) ((n << 1) | 1)

#define fi first
#define se second
#define FOR(i, l, r, k) for( int i = l; i <= r; i += k)
#define FOD(i, r, l, k) for( int i = r; i >= l; i -= k)

#define mii map<int,int>
#define umi unordered_map<int, int>
#define pii pair<int,int>
#define vi vector<int>

using namespace std;

const int oo = 1e18;
const int mod = 14062008;
const int nmax = 300 + 8;
const int base = 311;

int n, a[nmax], k, dp[151][nmax][nmax];

int sol(int l, int i, int j){
    if(l > k){
        return 0;
    }
    if(i >= j) return -oo;
    if(!dp[l][i][j]) return dp[l][i][j];
    int res = -oo;
    res = max(res, sol(l + 1, i + 2, j) + abs(a[i] - a[i + 1]));
    res = max(res, sol(l + 1, i + 1, j - 1) + abs(a[i] - a[j]));
    res = max(res, sol(l + 1, i + 1, j - 2) + abs(a[i] - a[j]));
    res = max(res, sol(l, i + 1, j));
    res = max(res, sol(l, i, j - 1));
    return dp[l][i][j] = res;
}

main(){
    fast;
    openfile();
    cin >> n >> k;
    for(int i = 1; i <= n; ++i) cin >> a[i];
    memset(dp, -1, sizeof dp);
    cout << sol(1, 1, n);
}
