#include<iostream>
#include<stdio.h>
#include<cmath>
#include<cstring>
#include<queue>
#define MAX_N 1000
#define MAX_M 100000
#define INF 99999
using namespace std;
int dx[] = { -1,0,0,1 };
int dy[] = { 0,1,-1,0 };
typedef pair<int, int > P;
int n, m, nx, ny;
int cnt = 0;
char a[MAX_N][MAX_N];
P ps[MAX_M];
int d[MAX_N][MAX_N];
char fan(char x) {
if (x == '1')
return '0';
else
return '1';
}
int bfs(int x, int y) {
queue<P> que;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
d[i][j] = INF;
}
}
que.push(P(x, y));
d[x][y] = 0;
while (que.size()) {
P p = que.front();
que.pop();
for (int i = 0; i < 4; i++) {
nx = p.first + dx[i];
ny = p.second + dy[i];
if (0 > nx || nx > n || 0 > ny || ny > n || d[nx][ny] !=INF ) {
continue;
}
if (fan(a[nx][ny]) == a[x][y]) {
que.push(P(nx, ny));
d[nx][ny] = d[p.first][p.second] + 1;
cnt++;
}
}
}
return cnt;
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < m; i++) {
cin >> ps[i].first >> ps[i].second;
}
for (int i = 0; i < m; i++) {
cout << bfs(ps[i].first - 1, ps[i].second - 1) << endl;
}
}