import heapq
n,m=map(int,input().split())
edge=[[] for _ in range(n)]
for i in range(n-1):
  edge[i+1].append([0,i])
for _ in range(m):
  l,r,c=map(int,input().split())
  l-=1
  r-=1
  edge[l].append([c,r])
  edge[r].append([c,l])
def dijkstra_heap(s):
    #始点sから各頂点への最短距離
    infi=10**18
    d = [infi] * n
    used = [True] * n #True:未確定
    d[s] = 0
    used[s] = False
    edgelist = []
    for e in edge[s]:
        heapq.heappush(edgelist,e)
    while len(edgelist):
        minedge = heapq.heappop(edgelist)
        #まだ使われてない頂点の中から最小の距離のものを探す
        if not used[minedge[1]]:
            continue
        v = minedge[1]
        d[v] = minedge[0]
        used[v] = False
        for e in edge[v]:
            if used[e[1]]:
                heapq.heappush(edgelist,[e[0]+d[v],e[1]])
    if d[n-1]!=infi:
      return d[n-1]
    else:
      return -1
print(dijkstra_heap(0))