#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
//英语 看博友分析 抄博友程序 dfs
vector<int> g[2502];
int vis[2502];
int jg;
int n,m;
void dfs(int x)
{
//cout<<x<<endl;
jg++;
vis[x]=1;
for(int i=0;i<g[x].size();i++)
{
int t=g[x][i];
if(vis[t]==0)
{
dfs(t);
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int t;
cin>>t;
int a=i*m+j;
//cout<<a<<endl;
//cout<<t<<" "<<(t&1)<<" "<<(t&2)<<" "<<(t&4)<<" "<<(t&8)<<endl;
if((t&1)==0)
{
g[a].push_back(a-1);
g[a-1].push_back(a);
//g[a][a-1]=g[a-1][a]=1;
//cout<<a-1<<" "<<a<<endl;
}
if((t&2)==0)
{
g[a-m].push_back(a);
g[a].push_back(a-m);
//g[a-m][a]=g[a][a-m]=1;
//cout<<a<<" "<<a-m<<endl;
}
if((t&4)==0)
{
g[a].push_back(a+1);
g[a+1].push_back(a);
//g[a][a+1]=g[a+1][a]=1;
//cout<<a<<" "<<a+1<<endl;
}
if((t&8)==0)
{
g[a].push_back(a+m);
g[a+m].push_back(a);
//g[a][a+m]=g[a+m][a]=1;
//cout<<a<<" "<<a+m<<endl;
}
}
}
/*
for(int i=0;i<n*m;i++)
{
for(int j=0;j<m*n;j++)
{
cout<<g[i][j]<<" ";
}
cout<<endl;
}*/
int js=0;
int mx=0;
for(int i=0;i<n*m;i++)
{
if(vis[i]==0)
{
jg=0;
dfs(i);
//cout<<endl;
js++;
mx=max(mx,jg);
}
}
cout<<js<<endl;
cout<<mx<<endl;
return 0;
}