#include<bits/stdc++.h>
using namespace std;
int H,W;
int A[101][101];
int func(int i,int j)
{
   int ans = 0;
   if((j > 0)&&(A[i][j-1] == 1))
   {
     ans++;
   }
  if((i > 0)&&(A[i-1][j] == 1))
   {
     ans++;
   }
  if((j < W-1)&&(A[i][j+1] == 1))
   {
     ans++;
   }
  if((i < H-1)&&(A[i+1][j] == 1))
   {
     ans++;
   }
	return ans;
}
int main()
{
  int ans = 0;
  cin>>H>>W;
  string str;
  for(int i = 0;i < H;i++)
  {
    cin>>str;
    for(int j = 0;j < W;j++)
    {
      if(str[j] == '.')
      {
        A[i][j] = 1;
      }
      else
      {
        A[i][j] = 0;
      }
    }
  }
  for(int i = 0;i < H;i++)
  {
    for(int j = 0;j < W;j++)
    {
      if(A[i][j] == 1)
      {
        ans += func(i,j);
      }
      A[i][j] = 0;
    }
  }
  cout<<ans<<"\n";
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef map<int,int> mii;
typedef map<ll,ll> mll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<ll>   vl;
#define f(i,n)  for(i=0;i<n;i++)
#define f1(i,n)  for(i=1;i<n;i++)
#define fr(i,n) for(i=n-1;i>=0;i--)
#define em emplace_back
#define mp make_pair
#define in insert
#define fi first
#define sc second
#define b begin
#define e end
#define er erase
#define l length
#define c clear
#define si size
#define fastio ios_base::sync_with_stdio(false);cin.tie(0);
const double pi=3.141592653;
const ll infi=1000000001;
const ll MOD=1000000007;
const ll mod=998244353;
const string no="NO\n",yes="YES\n";

// ll gcd(ll a,ll b){
//     if(a==0)    return b;
//     gcd(b%a,a);
// }

// void dfs(vl v[],ll node,ll hai[]){
//     hai[node]=1;
//     for(auto i:v[node]){
//         if(hai[i]==0){
//             dfs(v,i,hai);
//         }
//     }
// }

// ll con(vl v[],ll hai[],ll sz){
//     ll count=0;
//     for(int i=1;i<sz;i++){
//         if(hai[i]==0){
//             count++;
//             dfs(v,i,hai);
//         }
//     }
    // return count;
// }

// void gcde(int a,int b,int *x,int *y){
//     if(a==0){
//         *x=0;
//         *y=1;
//         return;
//     }    
//     int x1,y1;
//     gcde(b%a,a,&x1,&y1);
    
//     *x=y1-(b/a)*x1;
//     *y=x1;
// }


// ll recur(vl v,ll in,ll m,ll n){
//     if(in==-1)  return 1000000000001;
//     ll d,e,c;
//     d=max(m/v[in],n*v[in]);
//     c=recur(v,in-1,m/v[in],n*v[in]);
//     e=recur(v,in-1,m,n);
//     return min(c,min(e,d));
// }

// ll bexpo(ll a,ll p){
//     ll x=1;
//     while(p){
//     if(p&1){
//         x=(x*a)%mod;
//     }
//     a=(a*a)%mod;
//     p>>=1;
//     }
//     return x;
// }
// int dx[8]{-1,0,0,1,-1,-1,1,1};
// int dy[8]{0,-1,1,0,-1,1,-1,1};


int main() {
    fastio
    int t=1;
    // cin>>t;
    ll n,m,i,l,d,bank,s,k,j,x,y,ans,q;

    while(t--){ans=0;
        cin>>n>>m;
        string s[n];
        f(i,n)  cin>>s[i];
        f(i,n){
            f(j,m-1){
                if(s[i][j]==s[i][j+1]&&s[i][j]=='.')    ans++;
            }
        }
        f(i,m){
            f(j,n-1){
                if(s[j][i]==s[j+1][i]&&s[j][i]=='.')    ans++;
            }
        }
    cout<<ans<<endl;
    }
    
    
	return 0;
}