#include <bits/stdc++.h>
using namespace std;
struct node{
int x;
int y;
};
const int N=1010;
int n,m,f[1010][1010],a[1010][1010],vis[1010][1010],turn[4][2]={{0,1},{1,0},{-1,0},{0,-1}},ans=1;
queue<node> b;
int bfs(node s){
if(f[s.x][s.y]) return f[s.x][s.y];
b.push(s);
vis[s.x][s.y]=1;
while(!b.empty()){
node u=b.front();
b.pop();
for(int i=0;i<4;i++){
int xx=u.x+turn[i][0],yy=u.y+turn[i][1];
if(xx>0&&yy>0&&xx<=n&&yy<=n&&a[xx][yy]!=a[u.x][u.y]&&!vis[xx][yy]){
ans++;
vis[xx][yy]=1;
node temp;
temp.x=xx,temp.y=yy;
b.push(temp);
}
}
}
return ans;
}
void rs(node s){
b.push(s);
f[s.x][s.y]=ans;
vis[s.x][s.y]=0;
while(!b.empty()){
node u=b.front();
b.pop();
for(int i=0;i<4;i++){
int xx=u.x+turn[i][0],yy=u.y+turn[i][1];
if(xx>0&&yy>0&&xx<=n&&yy<=n&&a[xx][yy]!=a[u.x][u.y]&&!f[xx][yy]){
f[xx][yy]=ans;
vis[xx][yy]=0;
node temp;
temp.x=xx,temp.y=yy;
b.push(temp);
}
}
}
return;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
string temp;
cin>>temp;
for(int j=0;j<n;j++){
a[i][j+1]=temp[j]-'0';
}
}
for(int i=0;i<m;i++){
ans=1;
node f;
cin>>f.x>>f.y;
cout<<bfs(f)<<endl;
rs(f);
}
return 0;
}