#include<bits/stdc++.h>
using namespace std;
int ix[4]={1,-1,0,0};
int iy[4]={0,0,1,-1};
int i_,j_;
int map_[1010][1010],head,tail,n,m,tot,mp[1010][1010];
struct node{
int x,y;
}mov[1000000];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%1d",&map_[i][j]);
}
}
for(int i=1;i<=m;i++){
cin>>i_>>j_;
if(mp[i_][j_]>0){
cout<<mp[i_][j_]<<endl;
continue;
}
memset(mov,0,sizeof mov);
head=0;tail=0;tot=0;
mov[++tail].x=i_;mov[tail].y=j_;
mp[i_][j_]=1;
while(tail>head){
head++;tot++;
for(int i=0;i<=3;i++){
int tx=mov[head].x+ix[i];
int ty=mov[head].y+iy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&mp[tx][ty]==0&&map_[mov[head].x][mov[head].y]+map_[tx][ty]==1){
mp[tx][ty]=1;
mov[++tail].x=tx,mov[tail].y=ty;
}
}
}
do{
mp[mov[tail].x][mov[tail].y]=tot;
}while(tail--);
cout<<tot<<endl;
}
return 0;
}