#include <iostream>
#include <queue>
using namespace std;
#define N 101
int go[8][2] =
{
-1,-1,
-1,0,
-1,1,
0,-1,
0,1,
1,-1,
1,0,
1,1,
};
struct E
{
int x, y;
};
queue<E> Q;
bool mark[N][N];
char maze[N][N];
int m, n;
void bfs(int x, int y);
int main()
{
while (cin >> m >> n)
{
int ans = 0;
while (!Q.empty())
Q.pop();
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
mark[i][j] = false;
cin >> maze[i][j];
}
}
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
if (maze[i][j] == '*')
continue;
if (mark[i][j] == true)
continue;
bfs(i, j);
ans++;
}
}
cout << ans << endl;
}
system("pause");
return 0;
}
void bfs(int x, int y)
{
E tmp,now;
tmp.x = x;
tmp.y = y;
Q.push(tmp);
while (!Q.empty())
{
now = Q.front();
Q.pop();
for (int i = 0; i < 8; i++)
{
int nx = now.x + go[i][0];
int ny = now.y + go[i][1];
if (nx<1 || nx>m || ny<0 || ny>n)
continue;
if (mark[nx][ny] == true)
continue;
if (maze[nx][ny] == '*')
continue;
tmp.x = nx;
tmp.y = ny;
Q.push(tmp);
mark[nx][ny] = true;
}
}
return;
}