#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#include <functional>
#include <cmath>
#include <string>
#include <set>
#include <map>
#include <cassert>
#define SIZE 605

using namespace std;
typedef long long int ll;
typedef pair <int,int> P;

char mp[SIZE][SIZE];
bool use[SIZE][SIZE];
int tt[SIZE][SIZE],yy[SIZE][SIZE];

int xsum(int x,int i,int j)
{
	return tt[x][j]-(i==0?0:tt[x][i-1]);
}
int ysum(int y,int i,int j)
{
	return yy[j][y]-(i==0?0:yy[i-1][y]);
}
int main()
{
	int n,m;
	scanf("%d %d",&n,&m);
	for(int i=0;i<n;i++) scanf("%s",&mp[i]);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(mp[i][j]=='#')
			{
				int x=i+j,y=i-j+m-1;
				use[x][y]=true;
			}
		}
	}
	n=n+m;//[0,n-1]*[0,n-1] 内にある
	ll ret=0;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			tt[i][j]=yy[i][j]=use[i][j];
			if(j>0) tt[i][j]+=tt[i][j-1];
			if(i>0) yy[i][j]+=yy[i-1][j];
		}
	}
	for(int i=0;i<n;i++)
	{
		for(int s=0;s<n;s++)
		{
			for(int t=s+1;t<n;t++)
			{
				if(use[i][s]&&use[i][t])
				{
					int l=t-s;
					if(i>=l)
					{
						ret+=xsum(i-l,s,t);
						if(use[i-l][s]) ret--;
						if(use[i-l][t]) ret--;
					}
					if(i+l<n)
					{
						ret+=xsum(i+l,s,t);
						if(use[i+l][s]) ret--;
						if(use[i+l][t]) ret--;
					}
				}
				if(use[s][i]&&use[t][i])
				{
					int l=t-s;
					if(i>=l)
					{
						ret+=ysum(i-l,s,t);
					}
					if(i+l<n)
					{
						ret+=ysum(i+l,s,t);
					}
				}
			}
		}
	}
	printf("%lld\n",ret);
	return 0;
}
