#include<iostream>
using namespace std;
int data[][];
int vis[][];
int roomnum;
int maxroom;
int m,n;
typedef struct node
{
int x;
int y;
}node;
node queue[];
int sum;
void bfs(int x, int y)
{
sum=;
int tail,head;
head=tail=;
vis[x][y]=;
node startnode;
startnode.x=x;
startnode.y=y;
queue[tail++]=startnode;
sum++;
while(head!=tail)
{
node cur,next;
cur=queue[head++];
if(!(data[cur.x][cur.y]&)&&cur.y->=&&vis[cur.x][cur.y-]==)
{
next.x=cur.x;
next.y=cur.y-;
vis[next.x][next.y]=;
queue[tail++]=next;
sum++;
}
if(!(data[cur.x][cur.y]&)&&cur.x->=&&vis[cur.x-][cur.y]==)
{
next.x=cur.x-;
next.y=cur.y;
vis[next.x][next.y]=;
queue[tail++]=next;
sum++;
}
if(!(data[cur.x][cur.y]&)&&cur.y+<n&&vis[cur.x][cur.y+]==)
{
next.x=cur.x;
next.y=cur.y+;
vis[next.x][next.y]=;
queue[tail++]=next;
sum++;
}
if(!(data[cur.x][cur.y]&)&&cur.x+<m&&vis[cur.x+][cur.y]==)
{
next.x=cur.x+;
next.y=cur.y;
vis[next.x][next.y]=;
queue[tail++]=next;
sum++;
}
}
}
int main()
{
//freopen("input.txt","r",stdin);
cin>>m>>n;
for(int i=;i<m;i++)
for(int j=;j<n;j++)
cin>>data[i][j];
for(int i=;i<m;i++)
for(int j=;j<n;j++)
vis[i][j]=;
maxroom=;
for(int i=;i<m;i++)
{
for(int j=;j<n;j++)
{
if(vis[i][j]==)
{
bfs(i,j);
if(sum>maxroom)
maxroom=sum;
roomnum++;
}
}
}
cout<<roomnum<<endl;
cout<<maxroom<<endl;
return ;
}