#include<bits/stdc++.h>
using namespace std;
int m,n;
struct aa{
int mi;
int mj;
int ans;
}a[1000005];
struct o{
int ii;
int jj;
}old[100000];
int num;
int aann[1005][1005];
char mmap[1005][1005];
bool vis[1005][1005];
queue<int> qi,qj;
int mx[4]={-1,0,1,0};
int my[4]={0,1,0,-1};
void bfs(int p){
while(!qi.empty()&&!qj.empty()){
int xx=qi.front();
int yy=qj.front();
qi.pop();
qj.pop();
num++;
old[num].ii=xx;
old[num].jj=yy;
if(mmap[xx][yy]=='1'){
for(int i=0;i<=3;i++){
if(mmap[xx+mx[i]][yy+my[i]]=='0'&&!vis[xx+mx[i]][yy+my[i]]){
a[p].ans++;
qi.push(xx+mx[i]);
qj.push(yy+my[i]);
vis[xx+mx[i]][yy+my[i]]=1;
}
}
}
else if(mmap[xx][yy]=='0'){
for(int i=0;i<=3;i++){
if(mmap[xx+mx[i]][yy+my[i]]=='1'&&!vis[xx+mx[i]][yy+my[i]]){
a[p].ans++;
qi.push(xx+mx[i]);
qj.push(yy+my[i]);
vis[xx+mx[i]][yy+my[i]]=1;
}
}
}
}
for(int i=1;i<=num;i++){
aann[old[i].ii][old[i].jj]=a[p].ans;
}
num=0;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>mmap[i][j];
}
}//输入n的地图
for(int i=1;i<=m;i++){
cin>>a[i].mi>>a[i].mj;
}//m个询问点
for(int i=1;i<=m;i++){
if(aann[a[i].mi][a[i].mj]!=0){
a[i].ans=aann[a[i].mi][a[i].mj];
}
else{
vis[a[i].mi][a[i].mj]=1;
qi.push(a[i].mi);
qj.push(a[i].mj);
bfs(i);
memset(vis,0,sizeof(vis));
}
}
for(int i=1;i<=m;i++){
cout<<a[i].ans+1<<endl;
}
return 0;
}