#include<bits/stdc++.h>
using namespace std;
#define N 55
int a[N][N];
int opt[2*N][N][N];
int main()
{
int k,x,i,j,m,n,add;
scanf("%d%d",&m,&n);
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
scanf("%d",&a[i][j]);
opt[2][1][1]=0;//第一步时 值为0
for (k=3;k<=m+n;k++)//从3开始
for (i=1;i<=min(k-1,m);i++)//这个要注意时k-1和m中的最小值
for (x=1;x<=min(k-1,m);x++)//同上
{
if (i==x) add=a[i][k-i];//i=x时是同一个位置只加上一个值
else add=a[i][k-i]+a[x][k-x];
opt[k][i][x]=max(opt[k][i][x],opt[k-1][i-1][x-1]);
opt[k][i][x]=max(opt[k][i][x],opt[k-1][i][x]);
opt[k][i][x]=max(opt[k][i][x],opt[k-1][i-1][x]);
opt[k][i][x]=max(opt[k][i][x],opt[k-1][i][x-1]);//每个人2种方向 乘法原理 共四个可能的状态
opt[k][i][x]+=add;
}
printf("%d\n",opt[m+n][m][m]);//最终状态
return 0;
}