#define all(v) v.begin() , v.end()
#define ll long long
#define LL LLONG_MAX
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#define cin(a) for(auto &it : a) cin>>it
#define cout(a) for(auto &it : a) cout<<it<<" "
#define endl "\n"
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <limits.h>
#include <cmath>
using namespace std;
const int N = 1e5+5;
#define int ll
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
int oo = LL;
int n,m;
char arr[1005][1005];
bool vis[1005][1005];
void dfs(int i,int j){
vis[i][j]=1;
for (int k = 0; k < 4; k++)
{
if( arr[i+dx[k]][j+dy[k]]=='.'){
if(vis[i+dx[k]][j+dy[k]]==0) dfs(i+dx[k],j+dy[k]);
}
}
}
void solve(){
cin >>n>>m;
for (int i = 0; i < n; i++)
{
for (int j = 0;j < m;j++)
{
cin >>arr[i][j];
}
}
int cnt=0;
for (int i = 0; i < n; i++)
{
for (int j = 0;j < m;j++)
{
if(arr[i][j]=='.' && vis[i][j]==0){
dfs(i,j);
cnt++;
}
}
}
cout << cnt<<endl;
}
signed main()
{
ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL);
// written by _DeadKiller.
int t=1;
// cin >>t;
while (t--)
{
solve();
}
}
I2RlZmluZSBhbGwodikgdi5iZWdpbigpICwgdi5lbmQoKQojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIExMIExMT05HX01BWAojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx2ZWN0b3I+CiNkZWZpbmUgY2luKGEpIGZvcihhdXRvICZpdCA6IGEpIGNpbj4+aXQKI2RlZmluZSBjb3V0KGEpIGZvcihhdXRvICZpdCA6IGEpIGNvdXQ8PGl0PDwiICIKI2RlZmluZSBlbmRsICJcbiIKI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxsaW1pdHMuaD4KI2luY2x1ZGUgPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTiA9IDFlNSs1OwogI2RlZmluZSBpbnQgbGwKaW50IGR4W10gPSB7MSwgMCwgLTEsIDB9OwppbnQgZHlbXSA9IHswLCAxLCAwLCAtMX07CmludCBvbyA9IExMOwppbnQgbixtOyAKY2hhciBhcnJbMTAwNV1bMTAwNV07CmJvb2wgdmlzWzEwMDVdWzEwMDVdOwp2b2lkIGRmcyhpbnQgaSxpbnQgail7CiAgICB2aXNbaV1bal09MTsKICAgIGZvciAoaW50IGsgPSAwOyBrIDwgNDsgaysrKQogICAgewogICAgICAgIGlmKCBhcnJbaStkeFtrXV1baitkeVtrXV09PScuJyl7CiAgICAgICAgICAgIGlmKHZpc1tpK2R4W2tdXVtqK2R5W2tdXT09MCkgZGZzKGkrZHhba10saitkeVtrXSk7CiAgICAgICAgfQogICAgfQp9CnZvaWQgc29sdmUoKXsKIGNpbiA+Pm4+Pm07CiBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKIHsKICAgIGZvciAoaW50IGogPSAwO2ogPCBtO2orKykKIHsKICAgIGNpbiA+PmFycltpXVtqXTsKIH0KIH0KIGludCBjbnQ9MDsKICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKIHsKICAgIGZvciAoaW50IGogPSAwO2ogPCBtO2orKykKIHsKICAgIGlmKGFycltpXVtqXT09Jy4nICYmIHZpc1tpXVtqXT09MCl7CiAgICAgICAgZGZzKGksaik7CiAgICAgICAgY250Kys7CiAgICB9CiB9CiB9CiAgICAgY291dCA8PCBjbnQ8PGVuZGw7IAp9CiBzaWduZWQgbWFpbigpCnsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSxjaW4udGllKE5VTEwpLGNvdXQudGllKE5VTEwpOwogLy8gd3JpdHRlbiBieSBfRGVhZEtpbGxlci4KIGludCB0PTE7IAovLyAgICBjaW4gPj50Owp3aGlsZSAodC0tKQp7CiAgc29sdmUoKTsKfQogCgoKfQoKCgogCgogICAgCgo=