#include<bits/stdc++.h>
using namespace std;
int n,m;
char mp[1001][1001];
int b[1001][1001];
bool visit[1001][1001];
int ans[10000001];
int k=0;
int fx[4]={1,0,0,-1},fy[4]={0,1,-1,0};
struct node{
int x,y;
}dian;
queue<node> q;
void bfs(){
while(q.size()){
dian=q.front();
q.pop();
for(int i=0;i<4;++i){
int tx=dian.x+fx[i];
int ty=dian.y+fy[i];
if(tx>n||tx<1||ty>n||ty<1||mp[dian.x][dian.y]==mp[tx][ty]||visit[tx][ty]==1){
continue;
}
else{
dian.x=tx;
dian.y=ty;
q.push(dian);
visit[tx][ty]=1;
b[tx][ty]=k;
ans[k]++;
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
memset(visit,0,sizeof(visit));
memset(b,0,sizeof(b));
char ch;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
cin>>ch;
mp[i][j]=ch;
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(b[i][j]==0){
++k;
dian.x=i,dian.y=j;
q.push(dian);
visit[dian.x][dian.y]=1;
b[dian.x][dian.y]=k;
ans[k]++;
bfs();
}
}
}
int xx,yy;
for(int i=1;i<=m;++i){
scanf("%d%d",&xx,&yy);
cout<<ans[b[xx][yy]]<<endl;
}
return 0;
}