A tourist wants to visit country Zeydabad for Zbazi (a local game in Zeydabad).

The country Zeydabad is a rectangular table consisting of n rows and m columns. Each cell on the country is either 'z' or '.'.

The tourist knows this country is named Zeydabad because there are lots of ''Z-pattern"s in the country. A ''Z-pattern" is a square which anti-diagonal is completely filled with 'z' and its upper and lower rows are also completely filled with 'z'. All other cells of a square can be arbitrary.

<image>

Note that a ''Z-pattern" can consist of only one cell (see the examples).

So he wants to count the number of ''Z-pattern"s in the country (a necessary skill for Zbazi).

Now your task is to help tourist with counting number of ''Z-pattern"s.

As input/output can reach huge size it is recommended to use fast input/output methods: for example, prefer to use gets/scanf/printf instead of getline/cin/cout in C++, prefer to use BufferedReader/PrintWriter instead of Scanner/System.out in Java.

Input

The first line contains two integers n, m (1 ≤ n, m ≤ 3000) — the number of rows and columns respectively.

Each of the next n lines contains m characters 'z' or '.' — the description of Zeydabad.

Output

Print the only integer a — the number of ''Z-pattern"s in Zeydabad.

Examples

Input

4 4
zzzz
zzz.
.z..
zzzz


Output

16


Input

1 4
z.z.


Output

2


Input

2 2
zz
zz


Output

5
import java.io.*;
import java.util.*;
public class ProE {
	static int n,m,ee,xx,yy,s,a,b,x;
	static long ans;
	static String ss;
	static int[] bit=new int[3005];
	static int[][] ll=new int[3005][3005];
	static int[][] rr=new int[3005][3005];
	static char[][] map=new char[3005][3005];
	static int[] head=new int[3005];
	static int[] edge=new int[3005];
	static int[] next=new int[3005];
	static Queue<Integer> q=new LinkedList<Integer>();
	static void add(int a,int b)
	{
		edge[ee]=b;next[ee]=head[a];
		head[a]=ee++;
	}
	static void up(int i,int x)
	{
		while(i<=n)
		{
			bit[i]+=x;
			i+=i&-i;
		}
	}
	static int sum(int i)
	{
		int s=0;
		while(i>0)
		{
			s+=bit[i];
			i-=i&-i;
		}
		return s;
	}

	public static void main(String[] args) throws IOException {
		BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
		ss=in.readLine();
		Scanner sc=new Scanner(ss);
		n=sc.nextInt();m=sc.nextInt();
		for(int i=1;i<=n;i++)
		{
			ss=" "+in.readLine();
			map[i]=ss.toCharArray();
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				if(map[i][j]=='.') ll[i][j]=0;
				else ll[i][j]=ll[i][j-1]+1;
			}
			for(int j=m;j>0;j--)
			{
				if(map[i][j]=='.') rr[i][j]=0;
				else rr[i][j]=rr[i][j+1]+1;
			}
		}
		a=1;b=0;
		for(int i=1;i<m+n;i++)
		{
			if(b<m) b++;
			else a++;
			xx=a-1;yy=b+1;s=0;
			Arrays.fill(head,-1);ee=0;
			while(++xx<=n&&--yy>0)
			{
				if(map[xx][yy]=='.') { s=0;continue;}
				s++;
				if(rr[xx][yy]<s) add(xx-rr[xx][yy],xx);
			}
			xx=a-1;yy=b+1;s=0;
			Arrays.fill(bit,0);
			q.clear();
			while(++xx<=n&&--yy>0)
			{
				if(map[xx][yy]=='.')
				{
					s=0;
					while(!q.isEmpty()) up(q.poll(),-1);
					continue;
				}
				s++;x=Math.min(n,ll[xx][yy]+xx-1);
				up(x,1);q.add(x);
				ans+=s-sum(xx-1);
				for(int j=head[xx];j!=-1;j=next[j])
					ans-=s-sum(edge[j]-1);
			}
		}
		System.out.println(ans);
	}
}
