#include <bits/stdc++.h>
using namespace std;
void use_cio() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
}
int h, w;
char grid[310][310];
vector<pair<int, int> > coin1[610];
vector<pair<int, int> > coin2[610];
long long cnt1, cnt2;
int main() {
  use_cio();
  cin >> h >> w;
  for (int i = 0; i < (h); i++) cin >> grid[i];
  for (int i = 0; i < (h); i++)
    for (int j = 0; j < (w); j++) {
      if (grid[i][j] == '#') {
        coin1[i + j].push_back({i, j});
        coin2[i - j + 300].push_back({i, j});
      }
    }
  for (int i = 0; i < (610); i++)
    sort(coin1[i].begin(), coin1[i].end()),
        sort(coin2[i].begin(), coin2[i].end());
  for (int i = 0; i < (610); i++) {
    int sz = coin1[i].size();
    for (int j = 0; j < (sz); j++) {
      for (int k = (j + 1); k < (sz); k++) {
        int d = abs(coin1[i][j].first - coin1[i][k].first);
        if (i + 2 * d < 610)
          cnt1 +=
              upper_bound(coin1[i + 2 * d].begin(), coin1[i + 2 * d].end(),
                          pair<int, int>(coin1[i][j].first + 2 * d, (int)1e9)) -
              lower_bound(coin1[i + 2 * d].begin(), coin1[i + 2 * d].end(),
                          pair<int, int>(coin1[i][j].first + d, (int)-1e9));
        if (i - 2 * d >= 0)
          cnt1 += upper_bound(coin1[i - 2 * d].begin(), coin1[i - 2 * d].end(),
                              pair<int, int>(coin1[i][j].first, (int)1e9)) -
                  lower_bound(coin1[i - 2 * d].begin(), coin1[i - 2 * d].end(),
                              pair<int, int>(coin1[i][j].first - d, (int)-1e9));
      }
    }
  }
  for (int i = 0; i < (610); i++) {
    int sz = coin2[i].size();
    for (int j = 0; j < (sz); j++) {
      for (int k = (j + 1); k < (sz); k++) {
        int d = abs(coin2[i][j].first - coin2[i][k].first);
        if (sz + 2 * d < 610) cnt1 += coin2[sz + 2 * d].size();
        if (sz - 2 * d >= 0) cnt1 += coin2[sz - 2 * d].size();
      }
    }
  }
  for (int i = 0; i < (610); i++) {
    int sz = coin2[i].size();
    for (int j = 0; j < (sz); j++) {
      for (int k = (j + 1); k < (sz); k++) {
        int d = abs(coin2[i][j].first - coin2[i][k].first);
        if (i + 2 * d < 610)
          cnt1 +=
              upper_bound(coin2[i + 2 * d].begin(), coin2[i + 2 * d].end(),
                          pair<int, int>(coin2[i][j].first + 2 * d, (int)1e9)) -
              lower_bound(coin2[i + 2 * d].begin(), coin2[i + 2 * d].end(),
                          pair<int, int>(coin2[i][j].first + d, (int)-1e9));
        if (i - 2 * d >= 0)
          cnt1 += upper_bound(coin2[i - 2 * d].begin(), coin2[i - 2 * d].end(),
                              pair<int, int>(coin2[i][j].first, (int)1e9)) -
                  lower_bound(coin2[i - 2 * d].begin(), coin2[i - 2 * d].end(),
                              pair<int, int>(coin2[i][j].first - d, (int)-1e9));
      }
    }
  }
  for (int i = 0; i < (h); i++) {
    for (int j = 0; j < (w); j++) {
      if (grid[i][j] == '#') {
        for (int k = j + 2; k < w; k += 2) {
          if (grid[i][k] == '#') {
            if (i + (k - j) / 2 < h &&
                grid[i + (k - j) / 2][(k + j) / 2] == '#')
              cnt2++;
            if (i - (k - j) / 2 >= 0 &&
                grid[i - (k - j) / 2][(k + j) / 2] == '#')
              cnt2++;
          }
        }
      }
    }
  }
  for (int i = 0; i < (w); i++) {
    for (int j = 0; j < (h); j++) {
      if (grid[j][i] == '#') {
        for (int k = j + 2; k < h; k += 2) {
          if (grid[k][i] == '#') {
            if (i + (k - j) / 2 < w &&
                grid[(k + j) / 2][i + (k - j) / 2] == '#')
              cnt2++;
            if (i - (k - j) / 2 >= 0 &&
                grid[(k + j) / 2][i - (k - j) / 2] == '#')
              cnt2++;
          }
        }
      }
    }
  }
  cout << cnt1 - cnt2 << "\n";
}
