# x,y,x是行数,y是列数,和传统认知是反的
# 本题思路是从外圈开始搜,把所有被洪水淹的地方都标记为‘1’,接着遍历输出0的个数
# 4 5
# 00000
# 00*00
# 0*0*0
# 00*00
# 经过一次外圈搜后
# 1 1 1 1 1
# 1 0 * 0 1
# 1 * 0 * 1
# 1 1 * 1 1
# 接着判断下一圈0周围是否有1即可判断是否应填充为1
import math
x,y=map(int,input().strip().split())
a=[]
for i in range(x):
a.append(list(input().strip())) # 直接用list()就可以把‘0000*’变为['0','0','0','*']
n=math.ceil(min(x,y)/2) # 这个搜索次数n是由min(x,y)决定的
# 先将外圈搜一遍
for i in range(y): # 搜上面和下面
if a[0][i] != '*':
a[0][i] = '1'
if a[x-1][i] != '*':
a[x-1][i] ='1'
for i in range(1,x-1): # 搜左边和右边
if a[i][0] != '*':
a[i][0] = '1'
if a[i][y-1] != '*':
a[i][y-1] = '1'
for i in range(1,n):
for j in range(y-2*i): # 搜内圈
#搜上面,判断此格是否与其他洪水格子联通,顺序为本格上下左右(逻辑为只要不是*且上下左右中有一格为1,该格子与洪水连通,记‘1’)
if a[i][j+i] !='*' and (a[i-1][j+i]=='1' or a[i+1][j+i]=='1' or a[i][j+i-1]=='1' or a[i][j+i+1]=='1'):
a[i][j+i]='1'
#搜下面,逻辑同上,将i(纵坐标)替换为x-i-1即可
if a[x-i-1][j+i] !='*' and (a[x-i-1-1][j+i]=='1' or a[x-i+1-1][j+i]=='1' or a[x-i-1][j+i-1]=='1' or a[x-i-1][j+i+1]=='1'):
a[x-i-1][j+i]='1'
for j in range(x-2*i):
#搜左面,把i替换为i+j,j+i替换为i
if a[i+j][i] !='*' and (a[i+j-1][i]=='1' or a[i+j+1][i]=='1' or a[i+j][i-1]=='1' or a[i+j][i+1]=='1'):
a[i+j][i]='1'
#搜右面,把i(横坐标)替换为y-i-1
if a[i+j][y-i-1] !='*' and (a[i+j-1][y-i-1]=='1' or a[i+j+1][y-i-1]=='1' or a[i+j][y-i-1-1]=='1' or a[i+j][y-i+1-1]=='1'):
a[i+j][y-i]='1'
# 遍历列表,输出即可
ans=0
for i in range(x):
for j in range(y):
if a[i][j]=='0':
ans+=1
print(ans)