#include <bits/stdc++.h>
#include <unistd.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef long double ldb;
const ll MAXN=1505;
char a[MAXN][MAXN];
ll n,m,ans,maxans;
const ll dir[][2]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,-1},{1,-1},{-1,1}};
bool b[100005];
struct Item{
ll x;
ll y;
};
void bfs(ll x,ll y){
ll sum=0;
queue<Item>q;
q.push({x,y});
a[x][y]='.';
while(!q.empty()){
Item curr=q.front();
q.pop();
if(curr.x<=n&&curr.y<=m&&curr.x>=1&&curr.y>=1)++sum;
for(ll i=0;i<8;++i){
ll nx=curr.x+dir[i][0],ny=curr.y+dir[i][1];
if(a[nx][ny]=='.'){
continue;
}
q.push({nx,ny});
a[nx][ny]='.';
}
}
if(b[sum]==false){
++ans;
b[sum]=true;
}
maxans=max(maxans,sum);
}
int main() {
memset(a,'.',sizeof(a));
cin>>n>>m;
for(ll i=1;i<=n;++i){
cin>>(a[i]+1);
}
for(ll i=1;i<=n;++i){
for(ll j=1;j<=m;++j){
if(a[i][j]=='.')continue;
bfs(i,j);
}
}
cout<<ans<<" "<<maxans<<endl;
return 0;
}