#include <bits/stdc++.h>
using namespace std;
const int di[] = {-1, 0, 1, 0};
const int dj[] = {0, 1, 0, -1};
const long long MOD = 1e9 + 7;
const long long INF = 1e14;
const double EPS = 1e-5;
int n, m;
vector<string> g;
vector<vector<int> > r, l, u, d;
void doRightLeft() {
  for (int i = 0; i < n; i++) {
    int last = m - 1;
    bool black = true;
    for (int j = m - 1; j >= 0; j--) {
      if (g[i][j] == '1')
        last = j, black = true;
      else if (black)
        last = j, black = false;
      r[i][j] = last;
    }
    last = 0;
    black = true;
    for (int j = 0; j < m; j++) {
      if (g[i][j] == '1')
        last = j, black = true;
      else if (black)
        last = j, black = false;
      l[i][j] = last;
    }
  }
}
void doUpDown() {
  for (int j = 0; j < m; j++) {
    int last = n - 1;
    bool black = true;
    for (int i = n - 1; i >= 0; i--) {
      if (g[i][j] == '1')
        last = i, black = true;
      else if (black)
        last = i, black = false;
      d[i][j] = last;
    }
    last = 0;
    black = true;
    for (int i = 0; i < n; i++) {
      if (g[i][j] == '1')
        last = i, black = true;
      else if (black)
        last = i, black = false;
      u[i][j] = last;
    }
  }
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  cin >> n >> m;
  g.resize(n);
  r.assign(n, vector<int>(m)), l = u = d = r;
  for (int i = 0; i < n; i++) cin >> g[i];
  doRightLeft();
  doUpDown();
  long long rs = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (g[i][j] == '0') {
        for (int k = i + 1, prv = 1; k < n; k++, prv++) {
          int sz = r[k][j] - j;
          if (sz >= prv) rs++;
          if (g[k][j] == '1' || j + prv >= m || g[k][j + prv] == '1') break;
        }
        for (int k = i - 1, prv = 1; k >= 0; k--, prv++) {
          int sz = r[k][j] - j;
          if (sz >= prv) rs++;
          if (g[k][j] == '1' || j + prv >= m || g[k][j + prv] == '1') break;
        }
        for (int k = i + 1, prv = 1; k < n; k++, prv++) {
          int sz = j - l[k][j];
          if (sz >= prv) rs++;
          if (g[k][j] == '1' || j - prv < 0 || g[k][j - prv] == '1') break;
        }
        for (int k = i - 1, prv = 1; k >= 0; k--, prv++) {
          int sz = j - l[k][j];
          if (sz >= prv) rs++;
          if (g[k][j] == '1' || j - prv < 0 || g[k][j - prv] == '1') break;
        }
        for (int k = i + 1, prv = 1; k < n; k++, prv++) {
          int a = j - l[k][j];
          int b = r[k][j] - j;
          if (a >= prv && b >= prv) rs++;
          if (j + prv >= m || j - prv < 0 || g[k][j + prv] == '1' ||
              g[k][j - prv] == '1')
            break;
        }
        for (int k = i - 1, prv = 1; k >= 0; k--, prv++) {
          int a = j - l[k][j];
          int b = r[k][j] - j;
          if (a >= prv && b >= prv) rs++;
          if (j + prv >= m || j - prv < 0 || g[k][j + prv] == '1' ||
              g[k][j - prv] == '1')
            break;
        }
        for (int k = j + 1, prv = 1; k < m; k++, prv++) {
          int a = i - u[i][k];
          int b = d[i][k] - i;
          if (a >= prv && b >= prv) rs++;
          if (i + prv >= n || i - prv < 0 || g[i + prv][k] == '1' ||
              g[i - prv][k] == '1')
            break;
        }
        for (int k = j - 1, prv = 1; k >= 0; k--, prv++) {
          int a = i - u[i][k];
          int b = d[i][k] - i;
          if (a >= prv && b >= prv) rs++;
          if (i + prv >= n || i - prv < 0 || g[i + prv][k] == '1' ||
              g[i - prv][k] == '1')
            break;
        }
      }
    }
  }
  cout << rs << endl;
  cin.ignore(), cin.get();
}
