#include<bits/stdc++.h>//偷懒专用库
#define ll long long
#define INF 110
#define MAXN 99999//宏定义
using namespace std;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}//快读,可以提供借鉴
int n,m,ans;//行,列,答案
char a[INF][INF];//存图
int f[12][2]={{2,0},{-2,0},{0,2},{0,-2},{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};//这就是找点的数组,画个图就出来了,按照题目给的
void dfs(int x,int y)//搜索喽
{
a[x][y]='-';//直接把能到的变成 '-'
for(int p=0;p<12;++p)//一共可以到十二个点,数组也刚好开到11;
{
int dx=x+f[p][0];//扩展到的点的横坐标
int dy=y+f[p][1];//扩展到的点的纵坐标
if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&a[dx][dy]=='#')//满足条件,没超界, 并且是 '#'就搜他
dfs(dx,dy);//搜他
}
}
int main()//主函数
{
n=read();
m=read();//读入
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
cin>>a[i][j];//存图
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
if(a[i][j]=='#')//搜到一个图案
{
dfs(i,j);//把这个图变成 '-'
ans++;//答案加一 ;
}
}
cout<<ans;//输出
return 0;//养成好习惯从你我做起
}
/**************************************************************
Problem: 1966
User: admin
Language: C++
Result: Accepted
Time:28 ms
Memory:2084 kb
****************************************************************/