#include<bits/stdc++.h>
using namespace std;
long long n,m,a[1005][1005],Max[1005][1005],flag[1005][1005],ans;
int dx[4]= {1,0,0};
int dy[4]= {0,1,-1};
int dfs(int x,int y) {
if(x==n&&y==m)
return 0;
for(int i=0; i<3; i++) {
int nx=x+dx[i],ny=y+dy[i];
if(nx>=0&&nx<n&&ny>=0&&ny<m&&!flag[nx][ny]) {
flag[nx][ny]=1;
ans+=a[nx][ny];
if(ans>=Max[nx][ny])
Max[nx][ny]=ans;
dfs(nx,ny);
flag[nx][ny]=0;
ans-=a[nx][ny];
}
}
}
int main() {
cin>>n>>m;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++) {
cin>>a[i][j];
Max[i][j]=-10000;
}
ans=a[0][0];
if(n==1&&m==1) {
cout<<ans;
return 0;
}
dfs(0,0);
cout<<max(ans,Max[n-1][m-1]);
}
10分