#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
#define N 1001
int n,m,dx[]={1,0,0,-1},dy[]={0,1,-1,0};
struct node{
int x,y;
}o,t;
queue<node> q;
char str[N];
int a[N][N],f[N][N],mem[N][N];
inline void bfs(){
for(int i=0;i<m;i++){
cin>>o.x>>o.y;
o.x--;o.y--;
if(mem[o.x][o.y]){
printf("%d\n",mem[o.x][o.y]);continue;
}
int cnt=0;
q.push(o);
while(!q.empty()){
o=q.front();
for(int j=0;j<4;j++){
t.x=dx[j]+o.x;
t.y=dy[j]+o.y;
if(t.x<0||t.y<0||t.x>=n||t.y>=n);else
if(f[t.x][t.y]!=-1&&a[t.x][t.y]+a[o.x][o.y]==1){//关键在这里
f[t.x][t.y]=-1;
q.push(t);
cnt++;
}
}
q.pop();
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(f[i][j]==-1)
f[i][j]=0,
mem[i][j]=cnt;
if(cnt==0) cnt++;
printf("%d\n",cnt);
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>str;
for(int j=0;j<n;j++)
a[i][j]=str[j]-‘0‘;
}
bfs();
return 0;
}