#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
****************************************************************/