#include<bits/stdc++.h>
using namespace std;
int a[1002][1002];
bool f[1002][1002];
struct data{
int x,y;
};
queue<data> q;
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j];
while(m--){
memset(f,0,sizeof(f));
int x,y;
cin>>x>>y;
f[x][y]=true;
q.push(data{x,y});
while(!q.empty()){
data tmp=q.front();
if(a[tmp.x-1][tmp.y]!=a[tmp.x][tmp.y]&&!f[tmp.x-1][tmp.y]){
q.push(data{tmp.x-1,tmp.y});
f[tmp.x-1][tmp.y]=true;
}
if(a[tmp.x+1][tmp.y]!=a[tmp.x][tmp.y]&&!f[tmp.x+1][tmp.y]){
q.push(data{tmp.x+1,tmp.y});
f[tmp.x+1][tmp.y]=true;
}
if(a[tmp.x][tmp.y-1]!=a[tmp.x][tmp.y]&&!f[tmp.x][tmp.y-1]){
q.push(data{tmp.x,tmp.y-1});
f[tmp.x][tmp.y-1]=true;
}
if(a[tmp.x][tmp.y+1]!=a[tmp.x][tmp.y]&&!f[tmp.x][tmp.y+1]){
q.push(data{tmp.x,tmp.y+1});
f[tmp.x][tmp.y+1]=true;
}
q.pop();
}
int ans=0;
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(f[i][j]) ans++;
cout<<ans<<"\n";
}
return 0;
}