#include <bits/stdc++.h>
using namespace std;
int N, M, Q;
bitset <1001> A[1001], CUT[1001];
int iter, VIS[1001][1001];
int IN[1002][1002];
int t, T[1001][1001], LOW[1001][1001];
vector <pair <int, int>> V;
int di[4] = {+1, +0, -1, +0};
int dj[4] = {+0, +1, +0, -1};
bool DFS(int i, int j)
{
VIS[i][j] = iter;
if(CUT[i][j]) return 1;
bool ret = 0;
for(int k = 0; k < 2; k++)
{
if(((i + di[k]) > N) || ((j + dj[k]) > M) || A[i + di[k]][j + dj[k]]) continue;
IN[i + di[k]][j + dj[k]]--;
V.push_back({i + di[k], j + dj[k]});
if(!IN[i + di[k]][j + dj[k]]) ret |= DFS(i + di[k], j + dj[k]);
}
return ret;
}
void DFSC(int i, int j, int ip = -1, int jp = -1)
{
T[i][j] = LOW[i][j] = ++t;
V.push_back({i, j});
// cout << i << ' ' << j << ' ' << ip << ' ' << jp << '\n';
for(int k = 0; k < 4; k++)
{
if(((i + di[k]) < 1) || ((i + di[k]) > N) || ((j + dj[k]) < 1) || ((j + dj[k]) > M) || (VIS[i + di[k]][j + dj[k]] != iter) || (((i + di[k]) == ip) && ((j + dj[k]) == jp))) continue;
if(T[i + di[k]][j + dj[k]]) LOW[i][j] = min(T[i + di[k]][j + dj[k]], LOW[i][j]);
else
{
DFSC(i + di[k], j + dj[k], i, j);
LOW[i][j] = min(LOW[i + di[k]][j + dj[k]], LOW[i][j]);
// CUT[i][j] = CUT[i][j] | (LOW[i + di[k]][j + dj[k]] >= T[i][j]);
}
}
return;
}
int main()
{
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> N >> M;
int x;
for(int i = 1; i <= N; i++)
{
for(int j = 1; j <= M; j++) {cin >> x; A[i][j] = x;}
}
IN[0][1] = IN[N + 1][M] = 1;
for(int i = 1; i <= N; i++)
{
for(int j = 1; j <= M; j++) IN[i][j] = !A[i][j] * (bool(IN[i - 1][j]) + bool(IN[i][j - 1]));
}
for(int i = N; i >= 1; i--)
{
for(int j = M; j >= 1; j--) IN[i][j] *= bool(IN[i + 1][j]) || bool(IN[i][j + 1]);
}
CUT[N][M] = 1;
// cout << "IN:\n";
// for(int i = 1; i <= N; i++)
// {
// for(int j = 1; j <= M; j++) cout << IN[i][j] << " \n"[j == M];
// }
cin >> Q;
int r, c;
while(Q--)
{
cin >> r >> c;
iter++;
if(!CUT[r][c] && (!IN[r][c] || !DFS(r, c)))
{
cout << "1\n";
IN[r][c] = 0;
V.clear();
}
else
{
cout << "0\n";
if(!V.size()) continue;
CUT[r][c] = 1;
for(pair <int, int> p : V) IN[p.first][p.second]++;
V.clear();
t = 0;
DFSC(r, c);
for(pair <int, int> p : V) T[p.first][p.second] = LOW[p.first][p.second] = 0;
V.clear();
// cout << "CUT:\n";
// for(int i = 1; i <= N; i++)
// {
// for(int j = 1; j <= M; j++) cout << CUT[i][j] << " \n"[j == M];
// }
}
}
return 0;
}