#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
typedef pair<int,int>PII;
const int INF=1e8;
const int MAX_N=1005;
char maze[MAX_N][MAX_N];
int d[MAX_N][MAX_N];
bool st[MAX_N][MAX_N];
int n,m;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int bfs(int x,int y)
{
queue<PII>q;
int sx=x,sy=y;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
d[i][j]=INF;
st[i][j]=false;
}
q.push(PII(sx,sy));
st[x][y]=true;
d[x][y]=1;
while(q.size())
{
PII p=q.front();
q.pop();
for(int i=0;i<4;i++)
{
int x0=p.first,y0=p.second;
int nx=x0+dx[i],ny=y0+dy[i];
if(1<=nx&&nx<=n&&1<=ny&&ny<=n&&maze[nx][ny]!=maze[x0][y0]&&d[nx][ny]==INF
&&!st[nx][ny])
{
q.push(PII(nx,ny));
st[nx][ny]=true;
d[x][y]++;
}
}
}
return d[x][y];
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
getchar();
for(int j=1;j<=n;j++)
scanf("%c",&maze[i][j]);
}
for(int i=0;i<m;i++)
{
int x,y;
scanf("%d %d",&x,&y);
printf("%d\n",bfs(x,y));
}
return 0;
}