#include <bits/stdc++.h>
using namespace std;

int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
int w,h;

typedef pair<int,int> pii;
typedef vector<vector<int> > vvi;


int dfs(int yi, int xi, vvi& used, vector<string>& m){

  stack<pii> st;
  st.push(pii(yi,xi));

  int size = 0;
  set<char> flag;
  while(st.size()){
    int y = st.top().first;
    int x = st.top().second;
    st.pop();
    if(used[y][x] == 1) continue;
    used[y][x] = 1; size ++;
    
    for(int i=0; i<4; i++){
      int ny = y + dy[i];
      int nx = x + dx[i];

      if(ny >= h || ny < 0 || nx >= w || nx < 0){ // ?£????
	continue;
      }
      else if(m[ny][nx] == 'B' || m[ny][nx] == 'W'){ // ???
	flag.insert(m[ny][nx]);
	continue;
      }
      else if( used[ny][nx] == 1 ){ // ??¢?´¢??????
	continue;
      }
      else if(m[ny][nx] == '.'){ // ?????????
	st.push(pii(ny,nx));
      }
    }
  }
  if( flag.size() == 2 || flag.size() == 0) return 0;
  if( *flag.begin() == 'W') return size*(-1);
  return size;

}


int main(){

  while(1){
    cin >> w >> h;
    if(!w and !h) break;

    vector<string> m(h);
    for(int j=0; j<h; j++)
      cin >> m[j];

    
    int bl=0,wh=0;
    vvi used(h,vector<int>(w,0));
    for(int j=0; j<h; j++){
      for(int i=0; i<w; i++){
	if( m[j][i] == '.' and used[j][i] == 0 ){
	  int x = dfs(j,i,used,m);
	  if(x > 0){
	    bl += x;
	  }
	  if(x < 0){
	    wh -= x;
	  }
	}
      }
    }
    cout << bl << " " << wh << endl;
  }
  
}