import sys
n,m = map(int,input().split())
puddle = 0
grid = [list(sys.stdin.readline().strip()) for _ in range(n) ]
visited = [[False]*m for _ in range(n)]
dirs = [(-1,-1),(-1,0),(-1,1),
(0,-1), (0,1),
(1,-1),(1,0),(1,1)]
# dfs版本
def dfs(x,y):
visited[x][y] = True
# 如果是水坑,则递归完所有相邻的w,并且标记
for dx,dy in dirs:
nx,ny = x+dx,y+dy
if 0<=nx<n and 0<=ny<m and not visited[nx][ny] and grid[nx][ny]=='W':
dfs(nx,ny)
# bfs版本
def bfs(x,y):
from collections import deque
dq = deque([(x,y)])
while dq:
x,y = dq.popleft()
for dx,dy in dirs:
nx,ny = x+dx,y+dy
if 0<=nx<n and 0<=ny<m and not visited[nx][ny] and grid[nx][ny]=='W':
dq.append((nx,ny))
visited[nx][ny]=1
# 正常遍历
# for i in range(n):
# for j in range(m):
# if grid[i][j]=='W' and not visited[i][j]:
# # dfs(i,j)
# bfs(i,j)
# puddle +=1
# 压缩优化
# 避免对普通格子计算visited
water_position=[(x,y) for x in range(n) for y in range(m) if grid[x][y]=='W']
for i,j in water_position:
if not visited[i][j]:
bfs(i,j)
puddle +=1
# 进一步压缩:
# 减少visited的内存占用
# visited = set()
print(puddle)