#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

typedef long long LL;
const int MaxN = 600;
using namespace std;

int n, m = 300, w;
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, &w)) {
		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 <= w; 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;
}
