#include<cstring>
#include<iostream>
using namespace std;
int n,m,map[55][55],f[105][55][55];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>map[i][j];
memset(f,-1,sizeof(f));
for(int stage=1;stage<=n+m-1;stage++)
for(int p1=1;p1<=stage;p1++)
for(int p2=1;p2<=stage;p2++)
{
int q1=stage-p1+1;
int q2=stage-p2+1;
if(p1<1||p1>n||q1<1||q1>m)continue;
if(p2<1||p2>n||q2<1||q2>m)continue;
for(int d1=0;d1<=1;d1++)
for(int d2=0;d2<=1;d2++)
{
int x1=p1+d1;
int y1=q1+d1;
int x2=p2+d2;
int y2=q2+d2;
if(x1<1||x1>n||y1<1||y1>m)continue;
if(x2<1||x2>n||y2<1||y2>m)continue;
if(x1==x2&&y1==y2)continue;
f[stage][x1][x2]=map[x1][y1]+map[x2][y2]+max(f[stage-1][p1][q1],f[stage-1][p2][q2]);
}
}
cout<<f[n+m-1][n-1][m]<<endl;
return 0;
}
四维过了,三维连样例都错