https://www.acmicpc.net/problem/14500
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
using namespace std;
int n, m, ans, sum;
int A[505][505];
void input() {
int i, j;
scanf("%d%d",&n,&m);
for (i = 1; i <= n; i++) {
for (j = 1; j <= m; j++) {
scanf("%d",&A[i][j]);
}
}
}
void case1(int i, int j) { // 가로 일자
sum = 0;
if (j + 3 <= m) {
sum = sum + A[i][j] + A[i][j+1] + A[i][j+2] + A[i][j+3];
}
if (ans < sum) ans = sum;
}
void case2(int i, int j) { // 세로 일자
sum = 0;
if (i + 3 <= n) {
sum = sum + A[i][j] + A[i+1][j] + A[i+2][j] + A[i+3][j];
}
if (ans < sum) ans = sum;
}
void case3(int i, int j) { // 뚱 사각형
sum = 0;
if (j + 1 <= m && i + 1 <= n) {
sum = sum + A[i][j] + A[i + 1][j] + A[i][j + 1] + A[i + 1][j + 1];
}
if (ans < sum) ans = sum;
}
void case4(int i, int j) { // L 자
sum = 0;
if (i + 2 <= n && j + 1 <= m) {
sum = sum + A[i][j] + A[i + 1][j] + A[i + 2][j] + A[i + 2][j + 1];
}
if (ans < sum) ans = sum;
}
void case5(int i, int j) { //L 자 대칭
sum = 0;
if (j + 1 <= m && i - 2 >= 1) {
sum = sum + A[i][j] + A[i][j+1] + A[i-1][j+1] + A[i -2][j +1];
}
if (ans < sum) ans = sum;
}
void case6(int i, int j) { // ---ㄱ형
sum = 0;
if (j + 2 <= m && i + 1 <= n) {
sum = sum + A[i][j] + A[i][j+1] + A[i][j+2] + A[i+1][j+2];
}
if (ans < sum) ans = sum;
}
void case7(int i, int j) {
sum = 0;
if (j + 2 <= m && i + 1 <= n) {
sum = sum + A[i][j] + A[i][j + 1] + A[i][j + 2] + A[i + 1][j];
}
if (ans < sum) ans = sum;
}
void case8(int i, int j) {
sum = 0;
if (j + 1 <= m && i + 2 <= n) {
sum = sum + A[i][j] + A[i][j + 1] + A[i+1][j + 1] + A[i + 2][j + 1];
}
if (ans < sum) ans = sum;
}
void case9(int i, int j) { //ㄱ형 대칭
sum = 0;
if (j + 1 <= m && i+2 <=n) {
sum = sum + A[i][j] + A[i][j+1] + A[i+1][j] + A[i+2][j];
}
if (ans < sum) ans = sum;
}
void case10(int i, int j) {
sum = 0;
if (j + 2 <=m && i -1 >=1) {
sum = sum + A[i][j] + A[i][j+1] + A[i][j+2] + A[i-1][j+2];
}
if (ans < sum) ans = sum;
}
void case11(int i, int j) {
sum = 0;
if (j + 2 <= m && i + 1 <= n) {
sum = sum + A[i][j] + A[i+1][j] + A[i+1][j+1] + A[i+1][j+2];
}
if (ans < sum) ans = sum;
}
void case12(int i, int j) {
sum = 0;
if (j + 2 <= m, i-1 >=1) {
sum = sum + A[i][j] + A[i][j+1] + A[i][j+2] + A[i-1][j+1];
}
if (ans < sum) ans = sum;
}
void case13(int i, int j) {
sum = 0;
if (j + 1 <= m && i + 2 <= n) {
sum = sum + A[i][j] + A[i+1][j] + A[i+1][j+1] + A[i+2][j];
}
if (ans < sum) ans = sum;
}
void case14(int i, int j) {
sum = 0;
if (j + 1 <= m && i + 1 <= n && i - 1 >= 1) {
sum = sum + A[i][j] + A[i][j+1] + A[i-1][j+1] + A[i+1][j+1];
}
if (ans < sum) ans = sum;
}
void case15(int i, int j) {
sum = 0;
if (j + 2 <= m && i + 1 <= n) {
sum = sum + A[i][j] + A[i][j+1] + A[i][j+2] + A[i+1][j+1];
}
if (ans < sum) ans = sum;
}
void case16(int i, int j) {
sum = 0;
if (j + 1 <= m && i+2 <=n) {
sum = sum + A[i][j] + A[i+1][j] + A[i+1][j+1] + A[i+2][j+1];
}
if (ans < sum) ans = sum;
}
void case17(int i, int j) {
sum = 0;
if (j + 1 <= m && i + 1 <= n && i - 1 >= 1) {
sum = sum + A[i][j] + A[i][j+1] + A[i+1][j] + A[i-1][j+1];
}
if (ans < sum) ans = sum;
}
void case18(int i, int j) {
sum = 0;
if (j + 2 <= m && i - 1 >= 1) {
sum = sum + A[i][j] + A[i][j+1] + A[i-1][j+1] + A[i-1][j+2];
}
if (ans < sum) ans = sum;
}
void case19(int i, int j) {
sum = 0;
if (j + 2 <= m && i + 1 <= n) {
sum = sum + A[i][j] + A[i][j+1] + A[i+1][j+1] + A[i+1][j+2];
}
if (ans < sum) ans = sum;
}
int main() {
//freopen("input.txt", "r",stdin);
input();
int i, j;
for (i = 1; i <= n; i++) {
for (j = 1; j <= m; j++) {
case1(i,j);
case2(i, j);
case3(i, j);
case4(i, j);
case5(i, j);
case6(i, j);
case7(i, j);
case8(i, j);
case9(i, j);
case10(i, j);
case11(i, j);
case12(i, j);
case13(i, j);
case14(i, j);
case15(i, j);
case16(i, j);
case17(i, j);
case18(i, j);
case19(i, j);
}
}
printf("%d",ans);
}