#include<cstdio>
using namespace std;
char charactor;
bool map[1001][1001];
int visit[1001][1001],ans[100001];
int num,temp,point[100001][3];
int walkx[5]={0,0,0,-1,1};
int walky[5]={0,1,-1,0,0};
void dfs(int startx,int starty,int pointsum){
if((map[startx+1][starty+1]==map[startx][starty]&&map[startx+1][starty-1]==map[startx][starty]
&&map[startx-1][starty+1]==map[startx][starty]&&map[startx-1][starty-+1]==map[startx][starty])
||(visit[startx+1][starty+1])&&visit[startx+1][starty-1]&&visit[startx-1][starty+1]&&visit[startx-1][starty-1]){
ans[pointsum]++;
return;
}
ans[pointsum]++;
visit[startx][starty]=1;
for(int counter=1;counter<=4;counter++){
int coordx=startx+walkx[counter];
int coordy=starty+walky[counter];
if(!map[coordx][coordy]&&coordx&&coordx<=num&&
coordy&&coordy<=num&&(map[startx][starty]^map[coordx][coordy])){
dfs(coordx,coordy,pointsum);
}
}
}
int main(){
scanf("%d%d",&num,&temp);
for(int count1=1;count1<=num;count1++){
for(int count2=1;count2<=num;count2++){
scanf("%c",&charactor);
map[count1][count2]=(charactor=='1');
}
}
for(int count=1;count<=temp;count++){
scanf("%d%d",&point[count][1],&point[count][2]);
dfs(point[count][1],point[count][2],count);
}
for(int count=1;count<=temp;count++){
printf("%d",ans[count]);
puts("");
}
return 0;
}