/*
TASK:apple
LANG:C++
*/
#include<stdio.h>
#define maxn 75
#define MAX(a, b) (((a)<(b))?(b):(a))
#define MIN(a, b) (((a)<(b))?(a):(b))


using namespace std;
void input();
void solve();

int apples[maxn];
int dp[maxn][maxn][maxn] = {0};
int N, M;
int mx[maxn][maxn];


int main()
{
input();
solve();


return 0;
}


void solve()
{
int i, j, j1, j2, x;


apples[0] = 0;
for(i = 1; i <= M; i++) apples[i] = apples[i-1] + mx[1][i];

for(i = 1; i <= M; i++)
      for(j = i; j <= M; j++)
            dp[1][i][j] = apples[j];

for(i = 2; i <= N; i++)
	{
	apples[0] = 0;
	for(x = 1; x <= M; x++) apples[x] = apples[x-1] + mx[i][x];

	for(j1 = 1; j1 <= M; j1++)
		for(j2 = j1; j2 <= M; j2++)
			{
                        if(j1 == j2) { dp[i][j1][j2] = dp[i][j1-1][j2]; continue; }
                        dp[i][j1][j2] = 0;
                        for(int jx1 = 1; jx1 <= j1; jx1++)
                                for(int jx2 = j1+1; jx2 <= j2; jx2++)
                                        dp[i][j1][j2] = MAX(dp[i-1][jx1][jx2]+apples[j1]-apples[jx1-1]+apples[j2]-apples[jx2-1], dp[i][j1][j2]);
			}
	}


printf("%d\n", dp[N][M][M]);
}
                    


void input()
{
scanf("%d%d", &N, &M);
for(int i = 1; i <= N; i++)
      for(int j = 1; j <= M; j++)
            scanf("%d", &mx[i][j]);
}

