#include <cstdio>
#include <cstring>
#include <iostream>
#include <unordered_map>
using namespace std;
const int N = 1e2 + 5;
char ch[N][N];
int n, m, cnt = 0;
unordered_map<pair<int, int>, bool> mp;
int dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
int dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
bool find(unordered_map<pair<int, int>, bool>& x)
{
unordered_map<pair<int, int>, bool>::iterator ite = x.end();
for (unordered_map<pair<int, int>, bool>::iterator it = x.begin(); it != ite; ++it)
{
if (it->second == true) return false;
}
return true;
}
void dfs(int x, int y)
{
if (!(x > 0 && x <= n && y > 0 && y <= m) || ch[x][y] == '.' || mp[pair<int, int>(x, y)] == false)
{
return;
}
mp[pair<int, int>(x, y)] = false;
for (int i = 0; i <= 7; i++)
{
dfs(x + dx[i], y + dy[i]);
}
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> ch[i][j];
if (ch[i][j] == 'W')
{
mp[pair<int, int>(i, j)] = true;
}
}
}
while (!find(mp))
{
dfs((mp.begin()->first).first, (mp.begin()->first).second);
cnt++;
}
cout << cnt << endl;
return 0;
}