#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int f[1001][1001],queue[10001],l=1,r=1,ans,n,m;
int vis[1001][1001];
const int jump_x[5]={0,1,1,-1,-1};
const int jump_y[5]={0,1,-1,1,-1};
struct dfs{
int x,y;
}t[1000001];
int deal(int x,int y){
t[l].x=x; t[l].y=y; vis[x][y]=true; ans=0; l=r=1;
memset(vis,0,sizeof(vis));
while(l<=r){
vis[t[l].x][t[l].y]=true;
for(int i=1;i<=4;i++){
int nx=x+jump_x[i],ny=y+jump_y[i];
if(f[nx][ny]+f[x][y]==1&&!vis[nx][ny]&&nx>0&&ny>0&&nx<=n&&ny<=n){
r++; ans++;
t[r].x=nx; t[r].y=ny;
}
}
l++;
}
return ans;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>f[i][j];
}
}
for(int i=1;i<=m;i++){
int x,y; cin>>x>>y; cout<<deal(x,y);
}
return 0;
}