#include<cstdio>
int n,m;
char g[1001][1001];
bool vis[1001][1001];
int startx,starty;
int r;
int nxt[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
//01
//10
void dfs(int x,int y,int step)
{
r=step;
for(int i=0,nx,ny;i<4;i++)
{
nx=x+nxt[i][0];
ny=y+nxt[i][1];
if(nx<1||nx>n||ny<1||ny>n) continue;
if(g[x][y]=='1'&&g[nx][ny]=='0'&&!vis[nx][ny])
{
vis[nx][ny]=true;
dfs(nx,ny,step+1);
vis[nx][ny]=false;
}
else if(g[x][y]=='0'&&g[nx][ny]=='1'&&!vis[nx][ny])
{
vis[nx][ny]=true;
dfs(nx,ny,step+1);
vis[nx][ny]=false;
}
}
return ;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) scanf(" %c",&g[i][j]);
while(m--)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) vis[i][j]=false;
scanf("%d%d",&startx,&starty);
vis[startx][starty]=true;
dfs(startx,starty,1);
printf("%d\n",r);
}
return 0;
}