package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
buf := make([]byte, 1024*1024)
scanner.Buffer(buf, 1024*1024)
scanInt := func() int {
scanner.Scan()
b := scanner.Bytes()
res := 0
sign := 1
for _, c := range b {
if c == '-' {
sign = -1
} else {
res = res*10 + int(c-'0')
}
}
return res * sign
}
if !scanner.Scan() {
return
}
b := scanner.Bytes()
n := 0
for _, c := range b {
n = n*10 + int(c-'0')
}
m := scanInt()
A := make([][]int64, n)
pref := make([][]int64, n+1)
for i := 0; i <= n; i++ {
pref[i] = make([]int64, m+1)
}
for i := 0; i < n; i++ {
A[i] = make([]int64, m)
for j := 0; j < m; j++ {
A[i][j] = int64(scanInt())
pref[i+1][j+1] = pref[i][j+1] + pref[i+1][j] - pref[i][j] + A[i][j]
}
}
getSum := func(r1, c1, r2, c2 int) int64 {
return pref[r2+1][c2+1] - pref[r1][c2+1] - pref[r2+1][c1] + pref[r1][c1]
}
ans := int64(-1e18)
for cr := 0; cr < n; cr++ {
for cc := 0; cc < m; cc++ {
sum := A[cr][cc]
rad := 2
k := 5
for cr-rad >= 0 && cr+rad < n && cc-rad >= 0 && cc+rad < m {
r := cr - rad
c := cc - rad
border := getSum(r, c, r+k-1, c+k-1) - getSum(r+1, c+1, r+k-2, c+k-2)
sum += border - A[r+1][c] + A[r+2][c+1]
if sum > ans {
ans = sum
}
rad += 2
k += 4
}
}
}
for cr := 0; cr < n; cr++ {
for cc := 0; cc < m; cc++ {
rad := 1
k := 3
if cr-rad >= 0 && cr+rad < n && cc-rad >= 0 && cc+rad < m {
r := cr - rad
c := cc - rad
border := getSum(r, c, r+k-1, c+k-1) - getSum(r+1, c+1, r+k-2, c+k-2)
sum := border - A[r+1][c]
if sum > ans {
ans = sum
}
rad += 2
k += 4
for cr-rad >= 0 && cr+rad < n && cc-rad >= 0 && cc+rad < m {
r := cr - rad
c := cc - rad
border := getSum(r, c, r+k-1, c+k-1) - getSum(r+1, c+1, r+k-2, c+k-2)
sum += border - A[r+1][c] + A[r+2][c+1]
if sum > ans {
ans = sum
}
rad += 2
k += 4
}
}
}
}
fmt.Println(ans)
}