#include<bits/stdc++.h>
#define int long long
#define reint register int
#define forr(i,a,b) for(reint i=(a);i<=(b);i++)
using namespace std;
const int N=60;
int a[N][N];
int f[N][N][N][N];
inline int max(int i,int j,int qwq,int qaq)
{
return max(f[i-1][j][qwq][qaq-1],max(f[i-1][j][qwq-1][qaq],max(f[i][j-1][qwq-1][qaq],f[i][j-1][qwq][qaq-1])));
}
bool digit(char x)
{
return (x>='0' && x<='9');
}
inline int read()
{
int x=0;
int f=1;
char ch=getchar();
while(!digit(ch))
{
if(ch=='-')
{
f=-1;
}
ch=getchar();
}
while(digit(ch))
{
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
return x*f;
}
inline void write(int x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+'0');
return;
}
signed main()
{
int n,m;
n=read();
m=read();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
a[i][j]=read();
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int qwq=1;qwq<=n;qwq++)
{
for(int qaq=1;qaq<=n;qaq++)
{
f[i][j][qwq][qaq]=max(i,j,qwq,qaq)+a[i][j];
if(i!=qwq || j!=qaq)
{
f[i][j][qwq][qaq]+=a[qwq][qaq];
}
}
}
}
}
write(f[n][n][n][n]);
return 0;
}