import java.util.Scanner;
public class Main {
static int row;
static int col;
static int[][] arr;
static boolean[][] vis;
static int num;
static int maxInAll;
static int max;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
row = scanner.nextInt();
col = scanner.nextInt();
arr = new int[row][col];
vis = new boolean[row][col];
for (int i=0;i<row;i++){
for (int j=0;j<col;j++){
int a = scanner.nextInt();
arr[i][j] = a;
}
}
for (int i=0;i<row;i++) {
for (int j = 0; j < col; j++) {
if(!vis[i][j]){
num++;
max = 0;
dfs(i,j);
maxInAll = Math.max(max,maxInAll);
}
}
}
System.out.println(num);
System.out.println(maxInAll);
}
static void dfs(int x,int y){
max++;
vis[x][y] = true;
int a = arr[x][y];
String str = Integer.toBinaryString(a);
int length = str.length();
for (int i=0;i<4-length;i++){
str = "0"+str;
}
for (int i=0;i<4;i++){
//0:南;1:东;2:北;3:西
char v = str.charAt(i);
if(v == '0'){
if (i == 0 && x+1 < row && !vis[x+1][y]){
dfs(x+1,y);
} else if (i==1 && y+1 < col && !vis[x][y+1]){
dfs(x,y+1);
} else if (i==2 && x-1 >= 0 && !vis[x-1][y]){
dfs(x-1,y);
} else if (i==3 && y-1 >= 0 && !vis[x][y-1]){
dfs(x,y-1);
}
}
}
}
}