#include <iostream>
#include <vector>
#include <set>
#include <queue>
using namespace std;
//判断传入的连通块是否是矩形
int check(set<pair<int,int>> s){
pair<int,int> a = *s.begin();
pair<int,int> b = *s.rbegin();
//找出最小外接长方形的四个顶点
int min_first = a.first;
int max_first = b.first;
int min_second = a.second;
int max_second = a.second;
for(const auto& it : s){
if(it.second < min_second){
min_second = it.second;
}
if(it.second > max_second){
max_second = it.second;
}
}
//判断最小外接长方形是否每个顶点都在s内
for(int i = min_first; i <= max_first; i++){
for(int j = min_second; j <= max_second; j++){
if(!s.count({i, j})){
return 0;
}
}
}
return 1;
}
int main() {
//输入数据
int n, m;
cin >> n >> m;
vector<vector<int>> v(n, vector<int>(m));
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
char tmp;
cin >> tmp;
if(tmp == '*'){
v[i][j] = 1;
}
else{
v[i][j] = 0;
}
}
}
int count = 0;//结果计数
//对每一个0点找出所在的连通图(bfs)并标记访问,再判断连通图是否为长方形
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(v[i][j] == 0){
v[i][j] = 2;
set<pair<int,int>> s;
queue<pair<int,int>> q;
q.push({i, j});
s.insert({i, j});
//遍历邻接点,bfs
vector<int> a = {-1, 0, 0, 1};
vector<int> b = {0, -1, 1, 0};
while(!q.empty()){
pair<int, int> current = q.front();
q.pop();
for(int k = 0; k < 4; k++){
int ti = current.first + a[k];
int tj = current.second + b[k];
if(ti >= 0 && ti < n && tj >= 0 && tj < m && v[ti][tj] == 0){
v[ti][tj] = 2;
q.push({ti, tj});
s.insert({ti, tj});
}
}
}
if(check(s)){
count++;
}
}
}
}
//输出结果
cout << count << endl;
return 0;
}