#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = 550;
const int INF = 1000000000;
int n,m;
int G[maxn][maxn];
int earlist[maxn] = {0};
int indegree[maxn] = {0};
void tporder(){
int num = 0;
queue<int>qu;
for(int i=0;i<n;i++){
if(indegree[i]==0) qu.push(i);
}
while(!qu.empty()){
int u = qu.front();
qu.pop();
for(int v=0;v<n;v++){
if(G[u][v]!=INF){
if(earlist[u]+G[u][v]>earlist[v]){
earlist[v] = earlist[u]+G[u][v];
}
indegree[v]--;
if(indegree[v]==0) qu.push(v);
}
}
num++;
}
sort(earlist,earlist+n);
if(num==n) printf("%d",earlist[n-1]);
else printf("Impossible");
}
int main()
{
fill(G[0],G[0]+maxn*maxn,INF);
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
int u,v,c;
scanf("%d%d%d",&u,&v,&c);
G[u][v] = c;
indegree[v]++;
}
tporder();
return 0;
}