#include<bits/stdc++.h>
using namespace std;
struct zb{
int x,y;
};
bool a[1001][1001];
int c[1001][1001];
int r[500000];
int h=0;
queue<zb> zyc;
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++) {char t;cin>>t;a[i][j]=t-'0';}
}
for(int i=0;i<m;i++){
bool b[1001][1001]={};
zb e;
cin>>e.x>>e.y;
e.x=e.x-1;
e.y=e.y-1;
if(r[c[e.x][e.y]]!=0){
cout<<r[c[e.x][e.y]]<<endl;
continue;
}
h+=1;
int ans=1;
zyc.push(e);
b[e.x][e.y]=1;
while(!zyc.empty()){
zb ovo=zyc.front();
zyc.pop();
if(ovo.x>0 and a[ovo.x-1][ovo.y]!=a[ovo.x][ovo.y] and !b[ovo.x-1][ovo.y]){
ans++;
zb temp={ovo.x-1,ovo.y};
zyc.push(temp);
b[ovo.x-1][ovo.y]=1;
c[ovo.x-1][ovo.y]=h;
}
if(ovo.y>0 and a[ovo.x][ovo.y-1]!=a[ovo.x][ovo.y] and !b[ovo.x][ovo.y-1]){
ans++;
zb temp={ovo.x,ovo.y-1};
zyc.push(temp);
b[ovo.x][ovo.y-1]=1;
c[ovo.x][ovo.y-1]=h;
}
if(ovo.y<n-1 and a[ovo.x][ovo.y+1]!=a[ovo.x][ovo.y] and !b[ovo.x][ovo.y+1]){
ans++;
zb temp={ovo.x,ovo.y+1};
zyc.push(temp);
b[ovo.x][ovo.y+1]=1;
c[ovo.x][ovo.y+1]=h;
}
if(ovo.x<n-1 and a[ovo.x+1][ovo.y]!=a[ovo.x][ovo.y] and !b[ovo.x+1][ovo.y]){
ans++;
zb temp={ovo.x+1,ovo.y};
zyc.push(temp);
b[ovo.x+1][ovo.y]=1;
c[ovo.x+1][ovo.y]=h;
}
}
cout<<ans<<endl;
r[h]=ans;
}
}