N, M = list(map(int, input().split()))



es = [None] * M

for i in range(M):

    a,b,c = list(map(int, input().split()))

    es[i] = (a,b,c)



INF = float("inf")

d = [INF] * N # 頂点１からの最短距離

d[0] = 0



for i in range(N):

    for f, t, c in es:

        f, t = f-1, t-1

        c = c * -1 # ここで負にしておくと最小経路を選んだ時に絶対値としては最大になるので最後にマイナスをかけて出せばよい

        if d[f] != INF and d[t] > d[f] + c: # fromまで到達できる、かつ、toまでのコストがfromまでのコスト＋from->toのコストより大きいとき

            d[t] = d[f] + c

            if i == N-1 and t == N-1: #N回目の更新でそれでも頂点Nが更新された→負の閉路がある

                print("inf")

                exit()



print((-d[-1]))




N, M = list(map(int, input().split()))



es = []

for i in range(M):

    a,b,c = list(map(int, input().split()))

    es.append((a-1, b-1, c))



INF = float("inf")

d = [INF] * N

d[0] = 0

"""

最大経路探索的な問題

よくあるベルマンフォード法なら、コストが正の値で、負の閉路が見つかったら失敗、という形で最小経路を求めることになる。

今回は最長経路なので、正の閉路が求まったら失敗にしたい。

なので

・コストを負の値でもつ。表示するときに正に変える

・コストを負にするので閉路を見つけられる

みたいな形にする

"""



def solve(start):

    for i in range(N):

        for a,b,c, in es:

            if d[a] != INF and d[a] + (-c) < d[b]:

                d[b] = d[a] + (-c)

                # 最後まで確認しても更新されたら閉路あり

                if i == N-1 and b == N-1:

                    return "inf"



    return -1*d[-1]



print((solve(0)))
N, M = list(map(int, input().split()))
es = [None] * M
for i in range(M):
    a, b, c = list(map(int, input().split()))
    es[i] = (a, b, c)
INF = float("inf")
d = [INF] * N  # 頂点１からの最短距離
d[0] = 0
for i in range(N):
    for f, t, c in es:
        f, t = f - 1, t - 1
        c = c * -1  # ここで負にしておくと最小経路を選んだ時に絶対値としては最大になるので最後にマイナスをかけて出せばよい
        if (
            d[f] != INF and d[t] > d[f] + c
        ):  # fromまで到達できる、かつ、toまでのコストがfromまでのコスト＋from->toのコストより大きいとき
            d[t] = d[f] + c
            if i == N - 1 and t == N - 1:  # N回目の更新でそれでも頂点Nが更新された→負の閉路がある
                print("inf")
                exit()
print((-d[-1]))

N, M = list(map(int, input().split()))
es = []
for i in range(M):
    a, b, c = list(map(int, input().split()))
    es.append((a - 1, b - 1, c))
INF = float("inf")
d = [INF] * N
d[0] = 0
"""
最大経路探索的な問題
よくあるベルマンフォード法なら、コストが正の値で、負の閉路が見つかったら失敗、という形で最小経路を求めることになる。
今回は最長経路なので、正の閉路が求まったら失敗にしたい。
なので
・コストを負の値でもつ。表示するときに正に変える
・コストを負にするので閉路を見つけられる
みたいな形にする
"""


def solve(start):
    for i in range(N):
        for (
            a,
            b,
            c,
        ) in es:
            if d[a] != INF and d[a] + (-c) < d[b]:
                d[b] = d[a] + (-c)
                # 最後まで確認しても更新されたら閉路あり
                if i == N - 1 and b == N - 1:
                    return "inf"
    return -1 * d[-1]


print((solve(0)))

-es = [None] * M +es = [] -    es[i] = (a, b, c) +    es.append((a - 1, b - 1, c)) -d = [INF] * N  # 頂点１からの最短距離 +d = [INF] * N -for i in range(N): -    for f, t, c in es: -        f, t = f - 1, t - 1 -        c = c * -1  # ここで負にしておくと最小経路を選んだ時に絶対値としては最大になるので最後にマイナスをかけて出せばよい -        if ( -            d[f] != INF and d[t] > d[f] + c -        ):  # fromまで到達できる、かつ、toまでのコストがfromまでのコスト＋from->toのコストより大きいとき -            d[t] = d[f] + c -            if i == N - 1 and t == N - 1:  # N回目の更新でそれでも頂点Nが更新された→負の閉路がある -                print("inf") -                exit() -print((-d[-1])) +""" +最大経路探索的な問題 +よくあるベルマンフォード法なら、コストが正の値で、負の閉路が見つかったら失敗、という形で最小経路を求めることになる。 +今回は最長経路なので、正の閉路が求まったら失敗にしたい。 +なので +・コストを負の値でもつ。表示するときに正に変える +・コストを負にするので閉路を見つけられる +みたいな形にする +""" + + +def solve(start): +    for i in range(N): +        for ( +            a, +            b, +            c, +        ) in es: +            if d[a] != INF and d[a] + (-c) < d[b]: +                d[b] = d[a] + (-c) +                # 最後まで確認しても更新されたら閉路あり +                if i == N - 1 and b == N - 1: +                    return "inf" +    return -1 * d[-1] + + +print((solve(0)))