#include <bits/stdc++.h>
using namespace std ;
char Map[ 1050 ][ 1050 ] ;
int vis[ 1050 ][ 1050 ] ;
int n , m , ans ;
int flag ;
int sx , sy ;
int dx[ 4 ] = { 0 , 0 , 1 , -1 } ;
int dy[ 4 ] = { 1 , -1 , 0 , 0 } ;
int pd ( int a , int b ) {
int sum = 0 ;
if ( Map[ a ][ b ] == '0' ) {
if ( Map[ a + 1 ][ b ] == '1' ) sum++ ;
if ( Map[ a ][ b + 1 ] == '1' ) sum++ ;
if ( Map[ a ][ b - 1 ] == '1' ) sum++ ;
if ( Map[ a - 1 ][ b ] == '1' ) sum++ ;
if ( sum == 0 ) return false ;
else return true ;
}
else if ( Map[ a ][ b ] == '1' ) {
if ( Map[ a + 1 ][ b ] == '0' ) sum++ ;
if ( Map[ a ][ b + 1 ] == '0' ) sum++ ;
if ( Map[ a - 1 ][ b ] == '0' ) sum++ ;
if ( Map[ a ][ b - 1 ] == '0' ) sum++ ;
if ( sum == 0 ) return false ;
else return true ;
}
}
void dfs ( int x , int y ) {
if ( pd ( x , y ) == false && flag == 0 ) {
cout << ans << endl ;
flag = 1 ;
return ;
}
for ( int i = 0 ; i < 4 ; i++ ) {
int newx = x + dx[ i ] ;
int newy = y + dy[ i ] ;
if ( Map[ newx - 1 ][ newy - 1 ] == 0 ) {
if ( 1 <= newx && newx <= n && 1 <= newy && newy <= n && Map[ newx ][ newy ] == '1' && vis[ newx ][ newy ] == 0 ) {
vis[ newx ][ newy ] = 1 ;
ans++ ;
dfs ( newx , newy ) ;
vis[ newx ][ newy ] = 0 ;
}
}
else if ( Map[ newx - 1 ][ newy - 1 ] == 1 ) {
if ( 1 <= newx && newx <= n && 1 <= newy && newy <= n && Map[ newx ][ newy ] == '0' && vis[ newx ][ newy ] == 0 ) {
vis[ newx ][ newy ] = 1 ;
ans++ ;
dfs ( newx , newy ) ;
vis[ newx ][ newy ] = 0 ;
}
}
}
}
int main ( ) {
memset ( Map , -1 , sizeof ( Map ) ) ;
cin >> n >> m ;
for ( int i = 1 ; i <= n ; i++ ) {
for ( int k = 1 ; k <= n ; k++ ) {
Map[ i ][ k ] = getchar( ) ;
}
}
for ( int i = 1 ; i <= m ; i++ ) {
scanf ( "%d%d" , &sx , &sy ) ;
vis[ sx ][ sy ] = 1 ;
flag = 0 ; ans = 1 ;
dfs ( sx , sy ) ;
vis[ sx ][ sy ] = 0 ;
}
return 0 ;
}