from re import M
import sys
from collections import deque
dirs = [(1,0), (-1,0), (0,1), (0,-1)]
# 判断这个区间内是不是都是矩形
def judge(ma,mi):
for i in range(mi[0],ma[0]+1):
for j in range(mi[1],ma[1]+1):
if grid2[i][j] == '*':
return 0
return 1
def DFS(x,y,ma,mi):
grid[x][y] = '*'
ma[0] = max(x, ma[0])
ma[1] = max(y, ma[1])
mi[0] = min(x, mi[0])
mi[1] = min(y, mi[1])
for dx,dy in dirs:
nx,ny = x+dx,y+dy
if 0<=nx<r and 0<=ny<c and grid[nx][ny] == '.':
DFS(nx,ny,ma,mi)
r , c = map(int,input().split())
grid = []
for _ in range(r):
grid.append(list(input()))
grid2 = [st.copy() for st in grid]
res = []
# ===================== 核心:无函数 BFS =====================
for i in range(r):
for j in range(c):
if grid[i][j] == '.':
# BFS 初始化
q = deque()
q.append((i, j))
grid[i][j] = '*'
# 当前连通块的最大/最小坐标
ma = [i, j]
mi = [i, j]
# BFS 循环
while q:
x, y = q.popleft()
# 更新最大最小
if x > ma[0]: ma[0] = x
if y > ma[1]: ma[1] = y
if x < mi[0]: mi[0] = x
if y < mi[1]: mi[1] = y
# 四个方向
for dx, dy in dirs:
nx = x + dx
ny = y + dy
if 0 <= nx < r and 0 <= ny < c and grid[nx][ny] == '.':
grid[nx][ny] = '*'
q.append((nx, ny))
res.append([ma, mi])
cnt = 0
for ma,mi in res:
if judge(ma,mi):
cnt+=1
print(cnt)