///Bismillahir Rahmanir Rahim
#include<bits/stdc++.h>

#define                           ll                          long long
#define                           int                         ll
#define                           fi                          first
#define                           si                          second
#define                           mp                          make_pair
#define                           pb                          push_back
#define                           pi                          pair<ll,ll>
#define                           clr(x)                      memset(x,0,sizeof(x));
#define                           f(i,l,r)                    for(int i=l;i<=r;i++)
#define                           rf(i,r,l)                   for(int i=r;i>=l;i--)
#define                           done(i)                     cout<<"done = "<<i<<endl;
#define                           show(x,y)                   cout<<x<<" : ";for(auto z:y)cout<<z<<" ";cout<<endl;
#define                           fast                        ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);

using namespace std;

const ll inf=1e18;
const int mod=1e9+7;
const int M=405;
int h,w;
string s[M];
int vis[M][M];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
int chk(int x,int y)
{
    if(x<0 || x>=h || y<0 || y>=w)return false;
    if(vis[x][y])return false;
    return true;
}
int cw=0,cb=0;
int dfs(int i,int j)
{
    vis[i][j]=1;
    if(s[i][j]=='#')cb++;
    else cw++;
    for(int k=0;k<4;k++)
    {
        int x=dx[k]+i;
        int y=dy[k]+j;
        if(!chk(x,y))continue;
        if(s[i][j]==s[x][y])continue;
        dfs(x,y);
    }
}
 main()

{
    fast
    cin>>h>>w;
    f(i,0,h-1)
    {
        cin>>s[i];
    }
    int ses=0;
    f(i,0,h-1)
    {
        f(j,0,w-1)
        {
            if(vis[i][j])continue;
            else
            {
                cb=cw=0;
                dfs(i,j);
                ses+=(cb*cw);
            }
        }
    }
    cout<<ses<<endl;
    return 0;

}




































#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, n) for(int i = 0; i < (n); i++)
#define rep1(i, n) for(int i = 1; i <= (n); i++)
#define co(x) cout << (x) << "\n"
#define cosp(x) cout << (x) << " "
#define ce(x) cerr << (x) << "\n"
#define cesp(x) cerr << (x) << " "
#define pb push_back
#define mp make_pair
#define Would
#define you
#define please

ll BIT1[200010];
ll BIT2[200010];

void add1(int A, ll B) {
	while (A > 0) {
		BIT1[A] = min(BIT1[A], B);
		A -= A & -A;
	}
}
ll query1(int A) {
	ll kotae = 1e18;
	while (A <= 200000) {
		kotae = min(kotae, BIT1[A]);
		A += A & -A;
	}
	return kotae;
}
void add2(int A, ll B) {
	while (A <= 200000) {
		BIT2[A] = min(BIT2[A], B);
		A += A & -A;
	}
}
ll query2(int A) {
	ll kotae = 1e18;
	while (A > 0) {
		kotae = min(kotae, BIT2[A]);
		A -= A & -A;
	}
	return kotae;
}

int main() {
	cin.tie(0);
	ios::sync_with_stdio(false);


	ll N, D;
	cin >> N >> D;
	int A[200001];
	rep1(i, N) cin >> A[i];

	rep1(i, 200000) BIT1[i] = 1e18;
	rep1(i, 200000) BIT2[i] = 1e18;

	rep1(i, N) {
		add1(i, A[i] + i * D);
	}
	rep1(i, N) {
		add2(i, A[i] - i * D);
	}

	ll setuyaku = 0;
	for (int i = 2; i < N; i++) {
		ll kari1 = query1(i + 1) - i * D;
		ll kari2 = query2(i - 1) + i * D;
		if (A[i] > min(kari1, kari2)) {
			setuyaku += A[i] - min(kari1, kari2);
		}
	}

	ll motomoto = 0;
	rep1(i, N - 1) motomoto += A[i];
	rep1(i, N - 1) motomoto += A[i + 1];
	motomoto += (N - 1) * D;

	co(motomoto - setuyaku);

	Would you please return 0;
}