# include <cstdio>
# include <cstring>
long long dp[2][3][2];
int n, ind, i, r3, r2, x;
# define verf ++poz == hg ? fread ( ch, 1, hg, stdin ), poz = 0 : 0
const int hg = 1 << 13;
int poz ;
char ch[ hg ] ;
inline void cit ( int &x ) {
if ( ch[0] == '\0' ) fread ( ch, 1, hg, stdin ) ;
else for ( ; ch[poz] < '0' || ch[poz] > '9' ; verf ) ;
for ( x = 0 ; ch[poz] >= '0' && ch[poz] <= '9' ; x = x * 10 + ch[poz] - '0', verf ) ;
}
inline void mx(long long &a, long long b) {
a = a > b ? a : b;
}
const long long oo = 1LL << 61;
int main() {
//freopen ("max.in", "r", stdin);
freopen ("adunare.in", "r", stdin);
cit (n); cit (x);
long long sol = x;
dp[1][1][1] = x;
for (i = 2; i <= n; ++i, ind ^= 1) {
//memset (dp[ind], -0x3f, sizeof (dp[ind]));
dp[ind][0][0] = dp[ind][0][1] = dp[ind][1][0] = dp[ind][1][1] =
dp[ind][2][0] = dp[ind][2][1] = -oo;
cit (x);
if (i >= 3)
mx(dp[ind][0][1], dp[ind ^ 1][2][0] + 3 * x);
if (i > 3)
mx(dp[ind][0][1], dp[ind ^ 1][0][1]);
if (i >= 6)
mx(dp[ind][0][0], dp[ind ^ 1][2][1] - 3 * x);
//if (i > 6)
mx(dp[ind][0][0], dp[ind ^ 1][0][0]);
mx(dp[ind][1][1], dp[ind ^ 1][0][0] + x);
if (i > 1)
mx(dp[ind][1][1], dp[ind ^ 1][1][1]);
if (i >= 4)
mx(dp[ind][1][0], dp[ind ^ 1][0][1] - x);
if (i > 4)
mx(dp[ind][1][0], dp[ind ^ 1][1][0]);
if (i >= 5)
mx(dp[ind][2][1], dp[ind ^ 1][1][0] + 2 * x);
if (i > 5)
mx(dp[ind][2][1], dp[ind ^ 1][2][1]);
mx(dp[ind][2][0], dp[ind ^ 1][1][1] - 2 * x);
if (i > 2)
mx(dp[ind][2][0], dp[ind ^ 1][2][0]);
for (r3 = 0; r3 < 3; ++r3)
for (r2 = 0; r2 < 2; ++r2) {
//mx(dp[ind][r3][r2], dp[ind ^ 1][r3][r2]),
mx(sol, dp[ind][r3][r2]);
//fprintf (stderr, "(%d %d %d): %d\n", i, r3, r2, dp[ind][r3][r2]);
}
}
for (int i = 0; i < hg; ++i)
ch[i] = 'a';
fprintf (fopen ("adunare.out", "w"), "0");
//fprintf (fopen ("max.out", "w"), "%lld\n", sol);
}