#include<bits/stdc++.h>
using namespace std;
char a[1002][1002];
int dis[4][2]={{1,0},{-1,0},{0,-1},{0,1}},n,m;
int vis[1002][1002];
struct node
{
int x,y;
}arr[1000001];
bool check(node nex)
{
if(nex.y<0||nex.x<0||nex.y>n||nex.x>n||vis[nex.y][nex.x]==1)
return true;
else return false;
}
int bfs(node start)
{
node cur,nex;
int sum=1;
memset(vis,0,sizeof(vis));
vis[start.y][start.x]=1;
queue<node>q;
q.push(start);
while(!q.empty())
{
cur=q.front();
q.pop();
if(a[cur.y][cur.x]=='1')
{
for(int i=0;i<4;i++)
{
nex.y=cur.y+dis[i][0];
nex.x=cur.x+dis[i][1];
if(check(nex)) continue;
if(a[nex.y][nex.x]=='0')
{
vis[nex.y][nex.x]=1;
sum++;
q.push(nex);
}
}
}
if(a[cur.y][cur.x]=='0')
{
for(int i=0;i<4;i++)
{
nex.y=cur.y+dis[i][0];
nex.x=cur.x+dis[i][1];
if(check(nex)) continue;
if(a[nex.y][nex.x]=='1')
{
vis[nex.y][nex.x]=1;
sum++;
q.push(nex);
}
}
}
}
return sum;
}
int main()
{
int i,j,sum[i];
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&arr[i].y,&arr[i].x);
}
for(i=1;i<=m;i++)
{
sum[i]=bfs(arr[i]);
}
for(i=1;i<=m;i++)
printf("%d\n",sum[i]);
return 0;
}