/*
TASK:apple
LANG:C++
*/

/* Powered by BattleFrenzy */
/* Eto zadacha za 100. */
/* MG Varna, A grupa */
/* O(M*N*N*N) */

#include<stdio.h>
#define M 75
#define max(a,b) ((a)>(b)?(a):(b))
int x,y,ys,ye,zs,ze,m,n,omax;
int masiv[M][M];
int sumx[M][M];
int otg[M][M][M];
int ox[M][M][M];

int main()
{

scanf("%d%d",&m,&n);
for(x=1;x<=m;x++)
for(y=1;y<=n;y++)
scanf("%d",&masiv[x][y]);

for(x=1;x<=m;x++)
for(y=1;y<=n;y++)
sumx[x][y]=sumx[x][y-1]+masiv[x][y];

for(x=1;x<=m;x++) //O(M)
for(ze=1;ze<=n;ze++)
for(zs=1;zs<=ze;zs++)
   {
   omax=0;
   for(y=1;y<zs;y++)
                    {
                    ox[zs][ze][y]=max(otg[x-1][zs][y],ox[zs][ze][y-1]);
                    ox[zs][ze][y]+=masiv[x][y];
                    otg[x][ze][y]=max(otg[x][ze][y],ox[zs][ze][y]+sumx[x][ze]-sumx[x][zs-1]);
                    }
   for(y=zs;y<=ze;y++)
                    {
                    ox[zs][ze][y]=max(otg[x-1][zs][y],ox[zs][ze][zs-1]);
                    otg[x][ze][y]=max(otg[x][ze][y],ox[zs][ze][y]+sumx[x][ze]-sumx[x][zs-1]);
                    }
   }

printf("%d\n",otg[m][n][n]);
return 0;
}

/*
for(x=1;x<=m;x++)
for(ys=1;ys<=n;ys++)
for(ye=1;ye<=n;ye++)
                    {
                    if(ye>=ys)
                              sum[x][ye][ys]=sumx[x][ye]-sumx[x][ys-1];
                    else
                        sum[x][ye][ys]=0;
                    }
*/
/*
//O(M*N^4)...
//za vseki red pootdelno...
for(x=1;x<=m;x++) //O(M)
for(zs=1;zz<=n;zz++)
for(ys=1;ys<zs;ys++) //O(N^2)
for(ze=zs;ze<=n;ze++)
{
for(ye=ys;ye<zs;ye++)   //O(N^2)
otg[x][ye][ze]=max(otg[x][ye][ze],sum[x][ye][ys]+sum[x][ze][zs]-sum[x][ye][zs]+otg[x-1][ys][zs]);
for(ye=zs;ye<=ze;ye++)   //O(N^2)
otg[x][ye][ze]=max(otg[x][ye][ze],otg[x-1][ye][ze])
otg[x][ye][ze]=max(otg[x][ye][ze],otg[x
*/
