#include <bits/stdc++.h>
using namespace std;
long long solve(vector<string> S) {
  int H = S.size(), W = S[0].size();
  long long ans = 0;
  for (int i = 0; i <= H + W - 2; ++i) {
    for (int j = i + 2; j <= H + W - 2; j += 2) {
      int B = (j - i) / 2;
      for (int k = 0; k < H - B; ++k) {
        if (i - k >= W || i - k - B < 0 || S[k][i - k] == '.' ||
            S[k + B][i - k - B] == '.')
          continue;
        int llim = max(k + B, j - W + 1);
        int rlim = min({k + 2 * B, H - 1, j}) + 1;
        for (int l = llim; l < rlim; ++l) {
          ans += (S[l][j - l] == '#' ? 1 : 0) * 2;
        }
        ans -=
            (0 <= j - (k + B) && j - (k + B) < W && S[k + B][j - (k + B)] == '#'
                 ? 1
                 : 0);
        ans -= (k + 2 * B < H && 0 <= j - (k + 2 * B) && j - (k + 2 * B) < W &&
                        S[k + 2 * B][j - (k + 2 * B)] == '#'
                    ? 1
                    : 0);
      }
    }
  }
  return ans;
}
vector<string> rotate(vector<string> S) {
  int H = S.size(), W = S[0].size();
  vector<string> ans(W, string(H, '?'));
  for (int i = 0; i < H; ++i) {
    for (int j = 0; j < W; ++j) {
      ans[j][H - i - 1] = S[i][j];
    }
  }
  return ans;
}
int main() {
  int H, W;
  cin >> H >> W;
  vector<string> S(H);
  for (int i = 0; i < H; ++i) {
    cin >> S[i];
  }
  long long ans = 0;
  for (int i = 0; i < 4; ++i) {
    ans += solve(S);
    S = rotate(S);
  }
  cout << ans / 2 << endl;
  return 0;
}
