N, M = gets.split(" ").map{|s| s.to_i}

cost = Array.new(N) {Array.new(N, Float::INFINITY)}

M.times {
	a, b = gets.split(" ").map{|s| s.to_i}
	cost[a-1][b-1] = cost[b-1][a-1] = 1
}

d = Array.new(N, Float::INFINITY)
used = Array.new(N, false)

d[0] = 0

loop {
	v = -1
	0.upto(N-1) {|u|
		v = u if not used[u] and (v == -1 or d[u] < d[v])
	}
	break if v == -1
	used[v] = true
	0.upto(N-1) {|u|
		if d[u] > d[v] + cost[v][u] then
			d[u] = d[v] + cost[v][u]
		end
	}
}

puts d[N-1] == Float::INFINITY ? -1 : d[N-1]