#include <bits/stdc++.h>
#define LL long long
#define endl '\n'
#define Aurora main
#define pb push_back
using namespace std;
int N,M,lo[501][501],dp[201][201][201];
void read(int &x){
int f=1;x=0;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch-'0');
ch=getchar();
}
x*=f;
}
void write(int x){
if(x<0)x*=-1,putchar('-');
if(x>9)write(x/10);
putchar(x%10+'0');
return;
}
signed Aurora(){
read(M);read(N);
for(int i=1;i<=M;i++) for(int j=1;j<=N;j++) read(lo[i][j]);
for(int k=3;k<=N+M;k++){
for(int ii=1;ii<=M;ii++){
for(int i2=1;i2<=M;i2++){
int jj=k-ii,j2=k-i2;
if(ii==i2&&jj==j2&&ii!=M&&j2!=N) continue;
dp[k][ii][i2]=max(max(dp[k-1][ii][i2],dp[k-1][ii-1][i2]),max(dp[k-1][ii][i2-1],dp[k-1][ii-1][i2-1]))+lo[ii][k-ii]+lo[i2][k-i2];
}
}
}
write(dp[M+N][M][M]);
exit(0);
}