#include <bits/stdc++.h>
using namespace std;
struct BoolName : numpunct<char> {
  string t, f;
  BoolName(string t = "Yes", string f = "No") : t(t), f(f) {}
  string do_truename() const { return t; }
  string do_falsename() const { return f; }
};
struct Initializer {
  Initializer() {
    cin.tie(0);
    ios::sync_with_stdio(0);
    cout << fixed << setprecision(15) << boolalpha;
    cout.imbue(locale(cout.getloc(), new BoolName));
  }
} initializer;
template <typename T>
istream &operator>>(istream &s, vector<T> &v) {
  for (T &t : v) s >> t;
  return s;
}
template <typename T>
ostream &operator<<(ostream &s, const vector<T> &v) {
  for (const T &t : v) s << t << endl;
  return s;
}
int main() {
  int h, w;
  cin >> h >> w;
  vector<string> s(h);
  cin >> s;
  vector<vector<bool>> v(600, vector<bool>(600));
  for (int i = 0; i < h; ++i) {
    for (int j = 0; j < w; ++j) {
      if (s[i][j] == '#') v[i - j + w][i + j] = true;
    }
  }
  int64_t res = 0;
  for (int d = 2; d < 600; d += 2) {
    for (int i = 0; i < 600; ++i) {
      int c = 0;
      for (int j = 0; j < d; ++j) {
        if (i + d < 600 && v[i + d][j]) ++c;
        if (i - d > 0 && v[i - d][j]) ++c;
      }
      for (int j = 0; j + d < 600; ++j) {
        if (i + d < 600 && v[i + d][j + d]) ++c;
        if (i - d > 0 && v[i - d][j + d]) ++c;
        if (v[i][j] && v[i][j + d]) {
          res += c;
        }
        if (i + d < 600 && v[i + d][j]) --c;
        if (i - d > 0 && v[i - d][j]) --c;
      }
    }
  }
  auto u = v;
  for (int i = 0; i < 600; ++i) {
    for (int j = 0; j < 600; ++j) {
      v[i][j] = u[j][i];
    }
  }
  for (int d = 2; d < 600; d += 2) {
    for (int i = 0; i < 600; ++i) {
      int c = 0;
      for (int j = 1; j < d - 1; ++j) {
        if (i + d < 600 && v[i + d][j]) ++c;
        if (i - d > 0 && v[i - d][j]) ++c;
      }
      for (int j = 0; j + d < 600; ++j) {
        if (i + d < 600 && v[i + d][j + d - 1]) ++c;
        if (i - d > 0 && v[i - d][j + d - 1]) ++c;
        if (v[i][j] && v[i][j + d]) {
          res += c;
        }
        if (i + d < 600 && v[i + d][j + 1]) --c;
        if (i - d > 0 && v[i - d][j + 1]) --c;
      }
    }
  }
  cout << res << endl;
}
