rd = lambda: map(int, input().strip().split())  # wczytywanie danych
# liczba skrzyżowań/dróg
n, m = rd()
G = [[] for i in range(n + 1)]
# wczytywanie grafu/planu miasta - para wierzchołek/waga
for i in range(m):
    u, v, w = rd()
    # ignorujemy drogi wychodzące ze szkoły (n) i wchodzące do domu (1)
    if (u != n) and (v != 1):
        G[u].append((v, w))

def BFS():
    # przechodzenie grafu wszerz, żeby ustalić wierzchołki/skrzyżowania osiągalne z 1
    q = [1]
    while len(q) > 0:
        u = q.pop(0)
        for (v, w) in G[u]:
            if v not in T:
                T.add(v)
                q.append(v)

def TopoSort():
    # algorytm Kahna z ograniczeniem na wierzchołki osiagalne z 1
    # zwraca 0 - OK (order zawiera porządek topologiczny)
    #        więcej niż 0 - jest cykl
    indegree = [0] * (n + 1)
    for u in T:
        for (v, w) in G[u]:
            indegree[v] += 1
    S = [1]     # wierzchołki osiągalne z 1 o zerowym indegree
    while len(S) > 0:
        u = S.pop()
        T.discard(u)
        order.append(u)
        for (v, w) in G[u]:
            indegree[v] -= 1   # zmniejszamy stopień wejściowy v
            if indegree[v] == 0:
                order.append(v)  # umieszczamy v w porządku topologicznym
                S.append(v)      # i wstawiany do kolejki wierzchołków do przetworzenia
    return len(T)

def CalculateDist():
    # najdłuższe drogi wyznaczanie dystansów i zwracanie wyniku
    dist = [0] * (n + 1)
    for u in order:
        for (v, w) in G[u]:
            if dist[v] < dist[u] + w:
                dist[v] = dist[u] + w  # można wydłużyć drogę
    return dist[n]

T = {1}     # zbiór wierzchołków osiągalnych z 1
BFS()
if n not in T:
    print("BRAK")
else:
    # porządek topologiczny
    order = [1]
    result = TopoSort()
    if result == 0:
        print(CalculateDist())
    else:
        print("WAGARY")