#include<bits/stdc++.h>
using namespace std;
int n,m,a[1005][1005],x,y,mx;
int lt[1005][1005];
bool pdd[1005][1005];
int xx[5]={0,0,0,-1,1};
int yy[5]={0,1,-1,0,0};
int pd[1005][1005];
queue<int> qx,qy;
void bfs(){
while(!qx.empty()){
int x0=qx.front();
int y0=qy.front();
qx.pop();
qy.pop();
for(int i=1;i<=4;i++){
int nx=x0+xx[i];
int ny=y0+yy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=n&&a[x0][y0]!=a[nx][ny]&&pd[nx][ny]==0){
pd[nx][ny]=1;
pdd[nx][ny]=true;
mx++;
qx.push(nx);
qy.push(ny);
}
}
}
cout<<mx<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(pdd[i][j]) lt[i][j]=mx;
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
scanf("%1d",&a[i][j]);
lt[i][j]=-1;
}
for(int i=1;i<=m;i++){
cin>>x>>y;
if(lt[x][y]>=0){
cout<<lt[x][y]<<endl;
continue;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
pd[i][j]=0;
pdd[i][j]=false;
}
}
mx=1;
pd[x][y]=1;
qx.push(x);
qy.push(y);
bfs();
}
return 0;
}