#include <bits/stdc++.h>
const int MaxN = 600;
using namespace std;
int n, m;
int a[MaxN + 5][MaxN + 5];
int c[MaxN + 5][MaxN + 5], r[MaxN + 5][MaxN + 5];
char s[305][305];
struct NODE {
  int x, y;
} p[300 * 300 + 5];
int main() {
  while (~scanf("%d%d", &n, &m)) {
    for (int i = 1; i <= n; i++) scanf("%s", s[i] + 1);
    int tot = 0;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        if (s[i][j] == '#') {
          int x = i + j - 1, y = i - j + m;
          p[++tot] = (NODE){x, y};
          a[x][y] = 1;
        }
      }
    }
    m *= 2;
    for (int i = 1; i <= m; i++) {
      for (int j = 1; j <= m; j++) {
        c[i][j] = c[i - 1][j] + a[i][j];
        r[i][j] = r[i][j - 1] + a[i][j];
      }
    }
    long long res = 0;
    for (int i = 1; i <= tot; i++) {
      int x = p[i].x, y = p[i].y;
      for (int d = 2; d <= m; d += 2) {
        if (x + d <= m && a[x + d][y]) {
          if (y + d <= m) res += c[x + d - 1][y + d] - c[x][y + d];
          if (y - d >= 0) res += c[x + d - 1][y - d] - c[x][y - d];
        }
        if (y + d <= m && a[x][y + d]) {
          if (x + d <= m) res += r[x + d][y + d] - r[x + d][y - 1];
          if (x - d >= 0) res += r[x - d][y + d] - r[x - d][y - 1];
        }
      }
    }
    printf("%lld\n", res);
  }
  return 0;
}
