#include <bits/stdc++.h>
using namespace std;
namespace SA {
int n, ws[1050], wa[1050], wb[1050], rk[1050], height[1050], sa[1050];
char w[1050];
void build(int m) {
  int i, j, p, *x = wa, *y = wb;
  for (i = 1; i <= m; i++) ws[i] = 0;
  for (i = 1; i <= n; i++) ws[x[i] = w[i]]++;
  for (i = 1; i <= m; i++) ws[i] += ws[i - 1];
  for (i = n; i; i--) sa[ws[x[i]]--] = i;
  for (j = 1; j < n; j <<= 1) {
    for (p = 0, i = n; i > n - j; i--) y[++p] = i;
    for (i = 1; i <= n; i++)
      if (sa[i] > j) y[++p] = sa[i] - j;
    for (i = 1; i <= m; i++) ws[i] = 0;
    for (i = 1; i <= n; i++) ws[x[i]]++;
    for (i = 1; i <= m; i++) ws[i] += ws[i - 1];
    for (i = n; i; i--) sa[ws[x[y[i]]]--] = y[i];
    swap(x, y);
    m = 1;
    for (i = 1; i <= n; i++)
      x[sa[i]] = y[sa[i] + j] == y[sa[i + 1] + j] && y[sa[i]] == y[sa[i + 1]]
                     ? m
                     : m++;
    if (m > n) break;
  }
  for (i = 1; i <= n; i++) rk[sa[i]] = i;
  p = 0;
  for (i = 1; i <= n; i++)
    if (rk[i] != n) {
      j = rk[i] + 1;
      for (; w[i + p] == w[sa[j] + p]; p++)
        ;
      height[rk[i]] = p;
      if (p) p--;
    }
}
void init() {
  n = 6;
  w[1] = 'a';
  w[2] = 'b';
  w[3] = 'a';
  w[4] = 'b';
  w[5] = 'b';
  w[6] = 'a';
  build(128);
}
}  // namespace SA
namespace Scape_Goat_Tree {
int ch[1050][2], val[1050], siz[1050], tot[1050], ex[1050], S[1050], V[1050],
    tp, koishi;
int root, f[1050], cnt;
double AL = 0.75;
void pushup(int p) {
  siz[p] = siz[ch[p][0]] + siz[ch[p][0]] + ex[p];
  tot[p] = tot[ch[p][0]] + tot[ch[p][0]] + 1;
}
int GG(int p) { return tot[p] * AL < max(tot[ch[p][0]], tot[ch[p][0]]); }
int newnode(int v) {
  int p = ++cnt;
  siz[p] = tot[p] = ex[p] = 1;
  val[p] = v;
  return p;
}
void insert(int &p, int v, int fa) {
  if (!p) {
    p = newnode(v);
    f[p] = fa;
    return;
  }
  insert(ch[p][v > val[p]], v, p);
  pushup(p);
  if (GG(p)) koishi = p;
}
void init() {
  insert(root, 1, 0);
  insert(root, 2, 0);
  insert(root, 3, 0);
  insert(root, 4, 0);
  insert(root, 5, 0);
}
}  // namespace Scape_Goat_Tree
int n, m;
char mp[605][605];
long long ans;
int s1[605][605], s2[605][605];
int main() {
  scanf("%d%d", &n, &m);
  int i;
  for (i = 1; i <= n; i++) scanf("%s", mp[i] + 1);
  int j;
  int tmp = max(n, m);
  n = m = tmp;
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++) mp[i][j] = (mp[i][j] == '#');
  int ln = n * 2 - 1;
  for (i = 1; i <= ln; i++) {
    for (j = 1; j <= ln; j++) {
      s1[i][j] = s1[i][j - 1] + (i - j + 1 >= 1 ? mp[i - j + 1][j] : 0);
      s2[i][j] = s2[i][j - 1] + (n - i + j >= 1 ? mp[n - i + j][j] : 0);
    }
  }
  int tx, ty;
  for (i = 1; i <= ln; i++) {
    for (j = 1; j <= n; j++) {
      int x = i - j + 1, y = j;
      if (x < 1) continue;
      for (tx = x - 1, ty = y + 1; tx >= 1 && ty <= n; tx--, ty++) {
        int tmp = x - tx;
        if (mp[x][y] && mp[tx][ty]) {
          ans +=
              s1[i + tmp + tmp][j + tmp + tmp] - s1[i + tmp + tmp][j + tmp - 1];
          if (i - tmp - tmp >= 1)
            ans +=
                s1[i - tmp - tmp][j] - s1[i - tmp - tmp][max(0, j - tmp - 1)];
        }
      }
    }
  }
  for (i = 1; i <= ln; i++) {
    for (j = 1; j <= n; j++) {
      int x = n - i + j, y = j;
      if (x < 1) continue;
      for (tx = x + 2, ty = y + 2; tx <= n && ty <= n; tx++, ty++) {
        int tmp = tx - x;
        if (mp[x][y] && mp[tx][ty]) {
          ans +=
              s2[i + tmp + tmp][j + tmp + tmp - 1] - s2[i + tmp + tmp][j + tmp];
          if (i - tmp - tmp >= 1)
            ans +=
                s2[i - tmp - tmp][j - 1] - s2[i - tmp - tmp][max(0, j - tmp)];
        }
      }
    }
  }
  printf("%lld\n", ans);
}
