#include<stdio.h>
#include<queue>
#include<algorithm>
using namespace std;
int bfs[2][50][50];
char str[50][51];
int dx[]={1,0,0,-1};
int dy[]={0,1,-1,0};
int main(){
	int a,b;
	while(scanf("%d%d",&a,&b),a){
		for(int i=0;i<b;i++)scanf("%s",str[i]);
		for(int i=0;i<50;i++)for(int j=0;j<50;j++)bfs[0][i][j]=bfs[1][i][j]=0;
		queue<pair<int,int> >Q;
		for(int i=0;i<b;i++){
			for(int j=0;j<a;j++){
				if(str[i][j]=='B'){
					bfs[0][i][j]=1;
					Q.push(make_pair(i,j));
				}
			}
		}
		while(Q.size()){
			int row=Q.front().first;
			int col=Q.front().second;
			Q.pop();
			for(int i=0;i<4;i++){
				if(0<=row+dx[i]&&row+dx[i]<b&&0<=col+dy[i]&&col+dy[i]<a&&str[row+dx[i]][col+dy[i]]=='.'&&!bfs[0][row+dx[i]][col+dy[i]]){
					bfs[0][row+dx[i]][col+dy[i]]=1;
					Q.push(make_pair(row+dx[i],col+dy[i]));
				}
			}
		}
		for(int i=0;i<b;i++){
			for(int j=0;j<a;j++){
				if(str[i][j]=='W'){
					bfs[1][i][j]=1;
					Q.push(make_pair(i,j));
				}
			}
		}
		while(Q.size()){
			int row=Q.front().first;
			int col=Q.front().second;
			Q.pop();
			for(int i=0;i<4;i++){
				if(0<=row+dx[i]&&row+dx[i]<b&&0<=col+dy[i]&&col+dy[i]<a&&str[row+dx[i]][col+dy[i]]=='.'&&!bfs[1][row+dx[i]][col+dy[i]]){
					bfs[1][row+dx[i]][col+dy[i]]=1;
					Q.push(make_pair(row+dx[i],col+dy[i]));
				}
			}
		}
		int B=0;
		int W=0;
		for(int i=0;i<b;i++)
			for(int j=0;j<a;j++){
				if(str[i][j]=='.'&&bfs[0][i][j]&&!bfs[1][i][j])B++;
				if(str[i][j]=='.'&&!bfs[0][i][j]&&bfs[1][i][j])W++;
			}
		printf("%d %d\n",B,W);
	}
}