#include using namespace std; #ifdef LOCAL #include "settings/debug.cpp" #define _GLIBCXX_DEBUG #else #define Debug(...) void(0) #endif #define rep(i, n) for (int i = 0; i < (n); ++i) using ll = long long; using ull = unsigned long long; int main() { int n, m; cin >> n >> m; vector a(n); rep(i, n) cin >> a[i]; vector Edges(m, tuple()); for (auto&& [from, to, cost] : Edges) cin >> from >> to >> cost, --from, --to; constexpr ll INF = 1e18; vector dist(n, INF); dist[n - 1] = -a[n - 1]; rep(i, n) { for (auto&& [from, to, _cost] : Edges) { ll cost = _cost - a[from]; if (dist[to] == INF) continue; if (dist[from] > dist[to] + cost) { dist[from] = dist[to] + cost; if (i == n - 1) { cout << "inf" << endl; return 0; } } } } cout << -dist[0] << endl; return 0; }