#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>

using namespace std;

/*
自分の周囲にBがあるならB
自分の周囲にWがあるならW
自分の周囲に両方があるならG
*/

char map[52][52];
bool flag[52][52];
int xv[]={0,1,0,-1};
int yv[]={1,0,-1,0};
int Bf,Wf,cnt;


void dfs(int X,int Y){
	flag[X][Y]=1;
	cnt++;
	
	for(int i=0;i<4;i++){
		if(map[X+xv[i]][Y+yv[i]]=='B')Bf=1;
		else if(map[X+xv[i]][Y+yv[i]]=='W')Wf=1;
		else if(map[X+xv[i]][Y+yv[i]]=='.'&&flag[X+xv[i]][Y+yv[i]]==0){
			dfs(X+xv[i],Y+yv[i]);
		}
	}
	
}

int main(){
	int W,H;
	while(cin>>W>>H,W){
		
		int BB=0,WW=0;
		for(int i=0;i<=W+1;i++)map[i][0]=map[i][H+1]='#';
		for(int i=0;i<=H+1;i++)map[0][i]=map[W+1][i]='#';
		for(int i=1;i<=H;i++){
			for(int j=1;j<=W;j++){
				cin>>map[j][i];
			}
		}
		memset(flag,0,sizeof(flag));
		
		for(int i=1;i<=H;i++){
			for(int j=1;j<=W;j++){
				if(!flag[j][i]&&map[j][i]=='.'){
					Bf=Wf=cnt=0;
					dfs(j,i);
					if(Bf&&!Wf)BB+=cnt;
					if(!Bf&&Wf)WW+=cnt;
				}
			}
		}
		cout<<BB<<" "<<WW<<endl;
	}
	
	
	
	return 0;
}
