#include <bits/stdc++.h>
using namespace std;
#define all(c) (c).begin(),(c).end()
#define rrep(i,n) for(int i=(int)(n)-1;i>=0;i--)
#define REP(i,m,n) for(int i=(int)(m);i<(int)(n);i++)
#define rep(i,n) REP(i,0,n)
#define iter(c) __typeof((c).begin())
#define tr(it,c) for(iter(c) it=(c).begin();it!=(c).end();it++)
#define pb(a) push_back(a)
#define rd(a) cin>>(a)
#define RD(a,b) cin>>(a)>>(b)
#define pr(a) cout<<(a)<<endl
#define PR(a,b) cout<<(a)<<" "<<(b)<<endl
#define F first
#define S second
#define ll long long
bool check(int n,int m,int x,int y){return (x<0||x>=n||y<0||y>=m)?false:true;}
const ll MAX=1000000007,MAXL=1LL<<60,dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};
typedef pair<int,int> P;

bool b[51][51];
int n,m;
bool ck;
string s[51];

int dfs(int nx, int ny,char c) {
  b[nx][ny]=true;
  int cnt=0;
  rep(i,4) {
    int x=nx+dx[i],y=ny+dy[i];
    if(check(n,m,x,y) && !b[x][y]) {
      if(s[x][y]=='.') cnt+=dfs(x,y,c);
      else if(s[x][y]!=c) ck=false;
    }
  }
  return cnt+1;
}

int main() {
  while(cin >> m >> n && n) {
    rep(i,n) cin >> s[i];
    memset(b,false,sizeof(b));
    int p=0,q=0;
    rep(i,n) {
      rep(j,m) {
	if(s[i][j]=='.') continue;
	rep(k,4) {
	  ck=true;
	  int x=i+dx[k],y=j+dy[k];
	  if(check(n,m,x,y) && !b[x][y] && s[x][y]=='.') {
	    if(s[i][j]=='W') {
	      int z=dfs(x,y,'W');
	      if(ck) q+=z;
	    } else {
	      int z=dfs(x,y,'B');
	      if(ck) p+=z;
	    }
	  }
	}
      }
    }
    PR(p,q);
  }
  return 0;
}
