from collections import deque
import sys
def  func():
    n, m = map(int, input().split())
    adj = [[] for i in range(5001)]
    count=0
    s=""
    for i in range(m):
        #u, v = map(int, input().split()) # 输入不一定两个数 有孤立点
        # 尝试读取一行,处理可能的EOF
        line = sys.stdin.readline()
        if not line:  # 已经到达输入末尾  输入的函数可能不是m 行
            break
        count+=1
        #s=s+str(count)+"--"+line
        edge=line.strip().split()
        if len(edge)!=2:
            continue
        u=int(edge[0])
        v=int(edge[1])
        if 1 <= u <= 5000 and 1 <= v <= 5000:  # 题目中范围
            #print(u,v)
            adj[u].append(v)
            adj[v].append(u)
    #print("数据行:",s)
    #print(adj)
    # 距离数组  -1 表示未访问
    #   distance = [-1] * (n + 1)  # 输入的点编号可能超出n 
    distance=[-1]*(5001)
    distance[1] = 0  # 起始位置
    # 设置队列当前节点的周围节点
    q = deque()
    q.append(1)
    # 遍历邻接表
    while q:
        u = q.popleft()
        temp=adj[u]
        #print(temp,distance)
        for v in adj[u]:
            if distance[v] == -1:
                distance[v] = distance[u] + 1
                q.append(v)
                if v==n:
                    q=deque() # 清空队列
                    break
    #print(distance)
    print(distance[n])
 
func()   


"""
首先读取输入的节点数 n 和边数 m,如果 n 为 1(起点和终点相同),直接输出 0。
构建邻接表表示图,对于每条边 (u,v),在邻接表中双向添加,因为这是无向图。
使用 BFS 算法寻找最短路径:
维护一个距离数组,记录每个节点到 1 号点的距离,初始值为 - 1 表示未访问
1 号点的距离初始化为 0
使用队列存储待访问的节点
对于每个节点,访问其所有未访问的邻居,更新距离并加入队列
当访问到 n 号节点时,立即输出其距离并结束程序。
如果 BFS 完成后仍未访问到 n 号节点,说明 1 号点无法到达 n 号点,输出 - 1。
该算法的时间复杂度为 O (n+m),空间复杂度为 O (n+m),能够高效处理题目中给出的规模限制(n≤5000,m≤50000)。



注意:图中可能存在孤立点,即存在点与任意点都没有边相连

如果1号点不能到达n号点,输出-1.
测试用例 
输入 m=815   实际只有269 行 

469 815   
449 499     # 499 超过469 所有abj 邻接表的大小为 
68 205
168 326
201 390
248 440
482 198
273 450
180 475
373 115
371 441
93 36
174 359
19 497
20 387
266 178
339 62
215 161
22 60
461 102
230 208
79 13
95 30
111 229
119 218
360 240
7 332
289 81
283 445
111 292
165 225
317 483
258 142
244 389
63 65
153 296
225 8
41 276
404 47
111 209
170 174
211 497
191 182
450 415
408 50
72 402
226 191
92 265
239 336
294 38
88 23
87 254
416 404
103 383
454 208
466 70
259 120
308 489
398 417
159 248
435 308
42 61
358 240
179 333
257 339
379 394
110 100
384 323
161 500
247 74
488 489
34 293
213 12
142 219
478 171
253 122
78 220
195 101
204 71
350 290
293 269
73 159
189 84
251 35
219 341
477 86
214 434
193 303
180 81
5 237
252 121
116 166
328 106
455 477
158 75
446 372
144 233
429 203
24 293
328 66
168 344
5 39
350 160
123 161
271 70
64 236
373 171
492 193
142 325
78 434
38 375
202 497
299 406
288 50
487 81
398 249
487 321
239 276
312 53
16 330
402 248
414 324
244 428
62 385
149 177
431 301
343 398
57 40
141 235
432 353
71 108
322 257
146 100
173 52
324 265
168 146
124 386
124 396
478 153
436 66
495 190
36 7
223 235
396 237
51 190
133 9
387 406
231 114
72 243
260 125
88 166
240 147
456 334
439 398
223 171
492 13
388 55
183 464
319 179
498 370
373 447
351 69
181 151
24 192
129 86
31 203
340 239
324 260
223 206
136 450
435 445
331 249
286 94
355 313
46 430
201 189
89 441
489 267
402 271
316 303
492 14
203 292
500 320
327 104
69 1
73 413
203 241
438 152
251 472
276 26
500 210
310 364
134 102
296 422
444 101
283 432
143 361
152 423
500 204
467 33
467 472
439 74
29 252
266 388
146 21
482 31
242 153
287 28
455 134
480 451
279 161
312 333
92 309
402 376
262 89
150 71
310 453
89 122
274 363
201 492
251 68
352 68
486 6
42 348
241 143
243 48
251 463
307 457
115 273
171 82
27 282
65 402
465 333
207 394
436 171
266 491
345 463
248 300
464 247
381 137
8 447
333 151
88 255
41 149
315 474
403 318
306 211
449 66
250 52
442 317
366 51
426 401
394 370
295 144
362 256
138 232
103 452
213 16
225 106
251 166
398 324
467 337
240 284
344 290
1    图中可能存在孤立点

程序异常退出, 请检查代码"是否有数组越界等异常"或者"是否有语法错误"
Traceback (most recent call last):
File "/tmp/a.py3", line 48, in
main()
File "/tmp/a.py3", line 18, in main
adj[v].append(u) # 无向图,双向添加
IndexError: list index out of range
"""