import math
N, M = map(int, input().split())
AtCodermap = [[math.inf for i in range(N)] for j in range(N)]
for i in range(M):
    L, R, C = map(int, input().split())
    AtCodermap[L-1][R-1] = C

Rootnum = N #ますめのかず
Distance = [math.inf] * Rootnum #それぞれのマスまでの初期値からの距離 最初は全部無限
NotYet = [math.inf]* Rootnum    #未探索の升目リスト　未探索は無限　探索済みは１になる
HowToGo = [[] for ssf in range(len(AtCodermap))]   #スタート地点からその場所への移動方法
print(Distance)
stert = 0 #スタート地点　整数で表す
Distance[stert] = 0 #初期値の場所は０

for Di in range(Rootnum):#すべてのマス探索するため
    SortedDistance = sorted(Distance)
    for Dj in range(len(AtCodermap[0])): #距離の小さいところから探索
        print(Distance)
        MASU = Distance.index(SortedDistance[Dj])
        MASUnum = MASU%len(AtCodermap[0])

        if NotYet[MASU] != 1: #きょりが小さくても探索済みなら意味がない　ここで調べるところをけってい　Djが今いるところ
            for Dk in range(len(AtCodermap[0])):#ここから探索
                print(Distance[Dk])
                if Distance[MASU] + AtCodermap[MASUnum][Dk] < Distance[Dk]: #もし今までの距離より今いるところから行ったほうが近かったら更新
                    Distance[Dk] = AtCodermap[MASUnum][Dk] + Distance[MASU] #距離を更新

    NotYet[MASU] = 1 #調べ終わったため探索済みに変更

if Distance[N-1] == math.inf:
    print(-1)
else:
    print(Distance[N-1])