Link to this code: https://cses.fi/paste/4d13d983bfe2cea1ad2378/
#include "bits/stdc++.h"
using namespace std;

constexpr int INF = 1e9;

int main() {
	int n; cin >> n;
	int m; cin >> m;
	vector<array<int, 2>> e(m);
	vector<vector<int>> adj(n);
	for (auto& [a, b] : e) {
		cin >> a >> b;
		--a, --b;
		adj[a].push_back(b);
		adj[b].push_back(a);
	}
	vector<int> d;
	auto bfs = [&](int s, int t) -> void {
		d.assign(n, INF);
		queue<int> Q;
		d[s] = 0;
		Q.push(s);
		while (!Q.empty()) {
			int v = Q.front();
			Q.pop();
			for (int u : adj[v]) {
				if (pair(v, u) == pair(s, t) || pair(u, v) == pair(s, t))
					continue;
				if (d[u] != INF)
					continue;
				d[u] = d[v] + 1;
				Q.push(u);
			}
		}
	};
	int ans = INF;
	for (auto [a, b] : e) {
		bfs(a, b);
		if (d[b] != INF) {
			ans = min(ans, d[b] + 1);
		}
	}
	cout << (ans == INF ? -1 : ans) << "\n";
}