#include <bits/stdc++.h>
using namespace std;
const int64_t oo = INT64_MAX / 5;
const size_t NAX = 256, BITS = 64;
template<typename T>
T read(istream& in = cin) { T x; in >> x; return x; }
int main()
{
const size_t n = read<size_t>();
const int64_t m = read<int64_t>();
static int64_t A[NAX];
for(size_t i = 0; i < n; i++)
cin >> A[i];
if(m == 0) { cout << 0; return 0; }
static int64_t B[BITS][NAX][NAX][2];
const size_t bits = __lg(m);
for(size_t i = 0; i < n; i++)
for(size_t j = i+1; j <= n; j++)
{
auto& b = B[0][i][j];
if(j-i > 2)
b[0] = b[1] = -oo;
else
{
if(j-i == 2)
b[0] = A[i+1], b[1] = (m & 1) ? b[0] : -oo;
else
b[0] = max((int64_t)0, A[i]), b[1] = (m & 1) ? b[0] : 0;
}
}
for(size_t k = 1; k <= bits; k++)
for(size_t i = 0; i < n; i++)
for(size_t j = i+1; j <= n; j++)
{
auto &b = B[k][i][j];
b[0] = b[1] = -oo;
b[1] = max(b[1], B[k-1][i][j][1]);
int64_t sum = -A[j];
for(size_t l = j+1; l --> i; )
{
sum += A[l];
b[0] = max(b[0], B[k-1][i][l][0] + B[k-1][l][j][0] + sum);
if(m >> k & 1)
b[1] = max(b[1], B[k-1][i][l][0] + B[k-1][l][j][1] + sum);
}
}
cout << B[bits][0][n][true];
}