#include<iostream>
#include<algorithm>
#include<numeric>
#include<vector>
#include<set>
#include<map>
#include <string>
#include <math.h>
#define cinf(n,x) for(int i=0;i<(n);i++) cin >> x[i];
typedef long long int ll;
using namespace std;

// 4近傍（右, 下, 左, 上）
int dy[4] = { 0, -1, 0, 1 };
int dx[4] = { 1, 0, -1, 0 };

bool inside(int y, int x, int H, int W) {
    return 0 <= y && y < H && 0 <= x && x < W;
}
int w,h;
char field[55][55];
int used[2][55][55];
void dfs(int y,int x,int a){
  if(inside(y,x,h,w)==false||field[y][x]!='.'||used[a][y][x]>0)return;
  used[a][y][x]++;
  for(int i=0;i<4;i++){
    dfs(y+dy[i],x+dx[i],a);
  }
}
int main(){
  while(1){
    cin >>w>>h;
    if(w==0&&h==0)break;
    for(int i=0;i<h;i++){
      string s; cin >>s;
      for(int j=0;j<w;j++){
        field[i][j]=s[j];
      }
    }
    int cntb=0; int cntw=0;
    for(int i=0;i<h;i++){
      for(int j=0;j<w;j++){
        used[0][i][j]=0;
        used[1][i][j]=0;
      }
    }
    for(int i=0;i<h;i++){
      for(int j=0;j<w;j++){
        if(field[i][j]=='B'){
          for(int k=0;k<4;k++){
            dfs(i+dy[k],j+dx[k],0);
          }
        }
        else if(field[i][j]=='W'){
          for(int k=0;k<4;k++){
            dfs(i+dy[k],j+dx[k],1);
          }
        }
      }
    }
    for(int i=0;i<h;i++){
      for(int j=0;j<w;j++){
        if(used[0][i][j]>0&&used[1][i][j]==0)cntb++;
        else if(used[0][i][j]==0&&used[1][i][j]>0) cntw++;
      }
    }
    cout << cntb << " " << cntw << endl;
  }
  return 0;
}
