#include <bits/stdc++.h>
using namespace std;
int a[500][500];
int hor[500][500], vert[500][500];
int n, m;
int sumhor(int i, int j1, int j2) {
  int ans = hor[i][j2];
  if (j1 > 0) ans -= hor[i][j1 - 1];
  return ans;
}
int sumvert(int j, int i1, int i2) {
  int ans = vert[i2][j];
  if (i1 > 0) ans -= vert[i1 - 1][j];
  return ans;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      scanf("%d", &a[i][j]);
      hor[i][j] = a[i][j];
      vert[i][j] = a[i][j];
      if (i > 0) vert[i][j] += vert[i - 1][j];
      if (j > 0) hor[i][j] += hor[i][j - 1];
    }
  int ans = -2000000000;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      if (i >= 2 && j + 2 < m) {
        int ans1 = 0;
        for (int i1 = i - 2; i1 <= i; i1++)
          for (int j1 = j; j1 <= j + 2; j1++)
            if (i1 != i - 1 || j1 == j + 2) ans1 += a[i1][j1];
        ans = max(ans, ans1);
        for (int k = 1; i - 2 - 2 * k >= 0 && i + 2 * k < n && j - 2 * k >= 0 &&
                        j + 2 + 2 * k < m;
             k++) {
          ans1 += a[i - 2 * k][j + 1 - 2 * k];
          ans1 += sumvert(j - 2 * k, i - 2 * k, i + 2 * k);
          ans1 += sumhor(i + 2 * k, j - 2 * k + 1, j + 2 + 2 * k);
          ans1 += sumvert(j + 2 + 2 * k, i - 2 - 2 * k, i + 2 * k - 1);
          ans1 += sumhor(i - 2 - 2 * k, j - 2 * k, j + 1 + 2 * k);
          ans = max(ans, ans1);
        }
      }
      int ans1 = a[i][j];
      for (int k = 1;
           i - 2 * k >= 0 && i + 2 * k < n && j - 2 * k >= 0 && j + 2 * k < m;
           k++) {
        ans1 += a[i + 2 - 2 * k][j + 1 - 2 * k];
        ans1 += sumvert(j - 2 * k, i + 2 - 2 * k, i + 2 * k);
        ans1 += sumhor(i + 2 * k, j - 2 * k + 1, j + 2 * k);
        ans1 += sumvert(j + 2 * k, i - 2 * k, i + 2 * k - 1);
        ans1 += sumhor(i - 2 * k, j - 2 * k, j + 2 * k - 1);
        ans = max(ans, ans1);
      }
    }
  printf("%d\n", ans);
  return 0;
}
