#include <bits/stdc++.h>
#define MAXN 31
using namespace std;
int a[MAXN][MAXN];
int f[MAXN][MAXN][MAXN][MAXN];
int dp[MAXN][MAXN][MAXN][MAXN];
//start 15:25
int n,m;
bool inco(int i,int j,int k,int l)
{
if(i<0 || j<0 || k<0 || l<0)return 1;
if(i>=n || j>=m || k>=n || l>=m)return 1;
if(k<i || l<j)return 1;
return 0;
}
int rek(int i,int j,int k,int l)
{
if(inco(i,j,k,l))return 0;
if(dp[i][j][k][l]!=0)return dp[i][j][k][l];
int x,y,z,v;
x=f[i][j][i][l]+min(min(rek(i+2,j,k,l),rek(i+1,j+1,k,l)),min(rek(i+1,j,k-1,l),rek(i+1,j,k,l-1)));
y=f[i][j][k][j]+min(min(rek(i+1,j+1,k,l),rek(i,j+2,k,l)),min(rek(i,j+1,k-1,l),rek(i,j+1,k,l-1)));
z=f[i][l][k][l]+min(min(rek(i+1,j,k,l-1),rek(i,j+1,k,l-1)),min(rek(i,j,k-1,l-1),rek(i,j,k,l-2)));
v=f[k][j][k][l]+min(min(rek(i+1,j,k-1,l),rek(i,j+1,k-1,l)),min(rek(i,j,k-2,l),rek(i,j,k-1,l-1)));
dp[i][j][k][l]=max(max(x,v),max(y,z));
return dp[i][j][k][l];
}
int cnt(int x,int b,int c,int d)
{
int sum=0;
for(int i=x;i<=c;i++)
{
for(int j=b;j<=d;j++)
{
sum+=a[i][j];
}
}
return sum;
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
}
}
int sum=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
for(int k=0;k<n;k++)
{
for(int l=0;l<m;l++)
{
if(inco(i,j,k,l)==0)
{
f[i][j][k][l]=cnt(i,j,k,l);
}
}
}
}
}
int ans=rek(0,0,n-1,m-1);
cout<<ans<<endl;
return 0;
}