import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static int n, m;
// 记录地图
public static char[][] chars = new char[110][110];
// 记录已访问
public static boolean[][] vis = new boolean[110][110];
// 记录答案
public static int ans = 0;
// x,y 八个位置分别对应上下左右以及四个对角线方向
public static int[] dx = {0,0,1,-1,-1,1,-1,1};
public static int[] dy = {1,-1,0,0,1,1,-1,-1};
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt();
m = in.nextInt();
String sa = in.nextLine();
String[] strs = new String[n];
int index = 0;
char[][] cs = new char[n][m];
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
strs[index] = in.nextLine();
cs[index] = strs[index].toCharArray();
index++;
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
chars[i][j] = cs[i - 1][j - 1];
}
}
// 遍历整个地图,统计水坑数量
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(chars[i][j] == 'W' && !vis[i][j]){
ans++; // 发现一个新水坑
dfs(i, j); // 遍历该水坑的所有格子
}
}
}
System.out.println(ans);
}
// W是水,'.'是干地
// 这里的dfs是遍历当前水坑的所有位置,一次标记一个水坑的所有位置
public static void dfs(int x, int y){
vis[x][y] = true;
// 按照上下左右四个对角线的顺序执行
for(int i = 0; i < 8; i++){
int nx = x + dx[i];
int ny = y + dy[i];
// 检查边界
if(nx < 1 || nx > n || ny < 1 || ny > m){
continue;
}
// 判断是否为未访问的水坑
if(!vis[nx][ny] && chars[nx][ny] == 'W'){
dfs(nx,ny);
}
}
}
}