#include <iostream>
#include <vector>
using namespace std;
int rows[]={-1,0,1,0};
int cols[]={0,1,0,-1};
char grid[1001][1001];
int visited[1001][1001];
bool isValid(int x,int y,int n,int m)
{
return x>=0 && y>=0 && x<n && y<m;
}
void BFS(int n,int m,int i,int j)
{
visited[i][j]=1;
for(int p=0;p<4;p++)
{
int X = i+rows[p];
int Y = j+cols[p];
if(isValid(X,Y,n,m) && grid[X][Y] == '.' && visited[X][Y] == 0)
{
BFS(n,m,X,Y);
}
}
}
int main() {
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>grid[i][j];
visited[i][j]=0;
}
}
int count1=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(grid[i][j] != '#' && visited[i][j] == 0)
{
BFS(n,m,i,j);
count1++;
}
}
}
cout<<count1<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IHJvd3NbXT17LTEsMCwxLDB9OwppbnQgY29sc1tdPXswLDEsMCwtMX07CgpjaGFyIGdyaWRbMTAwMV1bMTAwMV07CmludCB2aXNpdGVkWzEwMDFdWzEwMDFdOwoKYm9vbCBpc1ZhbGlkKGludCB4LGludCB5LGludCBuLGludCBtKQp7CglyZXR1cm4geD49MCAmJiB5Pj0wICYmIHg8biAmJiB5PG07Cn0KCnZvaWQgQkZTKGludCBuLGludCBtLGludCBpLGludCBqKQp7Cgl2aXNpdGVkW2ldW2pdPTE7CgkKCWZvcihpbnQgcD0wO3A8NDtwKyspCgl7CgkJaW50IFggPSBpK3Jvd3NbcF07CgkJaW50IFkgPSBqK2NvbHNbcF07CgkJCgkJaWYoaXNWYWxpZChYLFksbixtKSAmJiBncmlkW1hdW1ldID09ICcuJyAmJiB2aXNpdGVkW1hdW1ldID09IDApCgkJewoJCQlCRlMobixtLFgsWSk7CgkJfQoJfQoJCn0KCgppbnQgbWFpbigpIHsKCQoJaW50IG4sbTsKCWNpbj4+bj4+bTsKCglmb3IoaW50IGk9MDtpPG47aSsrKQoJewoJCWZvcihpbnQgaj0wO2o8bTtqKyspCgkJewoJCQljaW4+PmdyaWRbaV1bal07CgkJCXZpc2l0ZWRbaV1bal09MDsKCQl9Cgl9CgkKCWludCBjb3VudDE9MDsKCWZvcihpbnQgaT0wO2k8bjtpKyspCgl7CgkJZm9yKGludCBqPTA7ajxtO2orKykKCQl7CgkJCWlmKGdyaWRbaV1bal0gIT0gJyMnICYmIHZpc2l0ZWRbaV1bal0gPT0gMCkKCQkJewoJCQkJQkZTKG4sbSxpLGopOwoJCQkJY291bnQxKys7CgkJCX0KCQl9Cgl9CgkKCWNvdXQ8PGNvdW50MTw8ZW5kbDsKCQoJcmV0dXJuIDA7Cn0=