#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
struct DSU {
vector<int> parent;
DSU(int n) {
parent.resize(n);
iota(parent.begin(), parent.end(), 0);
}
int find_set(int v) {
if (v == parent[v])
return v;
return parent[v] = find_set(parent[v]);
}
void union_sets(int a, int b) {
a = find_set(a);
b = find_set(b);
if (a != b) {
parent[b] = a;
}
}
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
if (!(cin >> n >> m)) return 0;
vector<vector<int>> matrix(n, vector<int>(n, 0));
int virtual_top = n * n;
int virtual_bottom = n * n + 1;
DSU dsu(n * n + 2);
int dr[] = {-1, 1, 0, 0};
int dc[] = {0, 0, -1, 1};
int result = -1;
for (int i = 1; i <= m; i++) {
int r, c;
cin >> r >> c;
if (result != -1) continue;
matrix[r][c] = 1;
int current_id = r * n + c;
if (r == 0) {
dsu.union_sets(current_id, virtual_top);
}
if (r == n - 1) {
dsu.union_sets(current_id, virtual_bottom);
}
for (int d = 0; d < 4; d++) {
int nr = r + dr[d];
int nc = c + dc[d];
if (nr >= 0 && nr < n && nc >= 0 && nc < n && matrix[nr][nc] == 1) {
int neighbor_id = nr * n + nc;
dsu.union_sets(current_id, neighbor_id);
}
}
if (dsu.find_set(virtual_top) == dsu.find_set(virtual_bottom)) {
result = i;
}
}
cout << result << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bnVtZXJpYz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RydWN0IERTVSB7CiAgICB2ZWN0b3I8aW50PiBwYXJlbnQ7CiAgICAKICAgIERTVShpbnQgbikgewogICAgICAgIHBhcmVudC5yZXNpemUobik7CiAgICAgICAgaW90YShwYXJlbnQuYmVnaW4oKSwgcGFyZW50LmVuZCgpLCAwKTsKICAgIH0KICAgIAogICAgaW50IGZpbmRfc2V0KGludCB2KSB7CiAgICAgICAgaWYgKHYgPT0gcGFyZW50W3ZdKQogICAgICAgICAgICByZXR1cm4gdjsKICAgICAgICByZXR1cm4gcGFyZW50W3ZdID0gZmluZF9zZXQocGFyZW50W3ZdKTsgCiAgICB9CiAgICB2b2lkIHVuaW9uX3NldHMoaW50IGEsIGludCBiKSB7CiAgICAgICAgYSA9IGZpbmRfc2V0KGEpOwogICAgICAgIGIgPSBmaW5kX3NldChiKTsKICAgICAgICBpZiAoYSAhPSBiKSB7CiAgICAgICAgICAgIHBhcmVudFtiXSA9IGE7CiAgICAgICAgfQogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICAKICAgIGludCBuLCBtOwogICAgaWYgKCEoY2luID4+IG4gPj4gbSkpIHJldHVybiAwOwogICAgCiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IG1hdHJpeChuLCB2ZWN0b3I8aW50PihuLCAwKSk7CiAgICBpbnQgdmlydHVhbF90b3AgPSBuICogbjsKICAgIGludCB2aXJ0dWFsX2JvdHRvbSA9IG4gKiBuICsgMTsKICAgIAogICAgRFNVIGRzdShuICogbiArIDIpOwogICAgCiAgICBpbnQgZHJbXSA9IHstMSwgMSwgMCwgMH07CiAgICBpbnQgZGNbXSA9IHswLCAwLCAtMSwgMX07CiAgICAKICAgIGludCByZXN1bHQgPSAtMTsKICAgIAogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgaW50IHIsIGM7CiAgICAgICAgY2luID4+IHIgPj4gYzsKICAgICAgICBpZiAocmVzdWx0ICE9IC0xKSBjb250aW51ZTsKICAgICAgICAKICAgICAgICBtYXRyaXhbcl1bY10gPSAxOwogICAgICAgIGludCBjdXJyZW50X2lkID0gciAqIG4gKyBjOyAKCiAgICAgICAgaWYgKHIgPT0gMCkgewogICAgICAgICAgICBkc3UudW5pb25fc2V0cyhjdXJyZW50X2lkLCB2aXJ0dWFsX3RvcCk7CiAgICAgICAgfQogICAgICAgIGlmIChyID09IG4gLSAxKSB7CiAgICAgICAgICAgIGRzdS51bmlvbl9zZXRzKGN1cnJlbnRfaWQsIHZpcnR1YWxfYm90dG9tKTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgZCA9IDA7IGQgPCA0OyBkKyspIHsKICAgICAgICAgICAgaW50IG5yID0gciArIGRyW2RdOwogICAgICAgICAgICBpbnQgbmMgPSBjICsgZGNbZF07CiAgICAgICAgICAgIGlmIChuciA+PSAwICYmIG5yIDwgbiAmJiBuYyA+PSAwICYmIG5jIDwgbiAmJiBtYXRyaXhbbnJdW25jXSA9PSAxKSB7CiAgICAgICAgICAgICAgICBpbnQgbmVpZ2hib3JfaWQgPSBuciAqIG4gKyBuYzsKICAgICAgICAgICAgICAgIGRzdS51bmlvbl9zZXRzKGN1cnJlbnRfaWQsIG5laWdoYm9yX2lkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoZHN1LmZpbmRfc2V0KHZpcnR1YWxfdG9wKSA9PSBkc3UuZmluZF9zZXQodmlydHVhbF9ib3R0b20pKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IGk7CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCByZXN1bHQgPDwgIlxuIjsKICAgIHJldHVybiAwOwp9