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]