N, M = gets.split(" ").map{|s| s.to_i} r = Array.new(N) {Array.new} M.times { a, b = gets.split(" ").map{|s| s.to_i} r[a-1] << (b-1) r[b-1] << (a-1) } d = Array.new(N, Float::INFINITY) d[0] = 0 q = [0] fin = false while not fin and q.length > 0 v = q.shift r[v].each {|nv| if d[nv] > d[v] + 1 then d[nv] = d[v] + 1 q << nv if nv == N-1 then fin = true break end end } end puts fin ? d[N-1] : -1