class Union_Find(): def __init__(self,N): """0,1,...,n-1を要素として初期化する. N:要素数 """ self.n=N self.parents=[-1]*N self.rank=[0]*N def find(self, x): """要素xの属している族を調べる. x:要素 """ V=[] while self.parents[x]>=0: V.append(x) x=self.parents[x] for v in V: self.parents[v]=x return x def union(self, x, y): """要素x,yを同一視する. x,y:要素 """ x=self.find(x) y=self.find(y) if x==y: return if self.rank[x]1: C=L+(R-L)//2 if cond(C): L=C else: R=C return L else: while (R-L)>=ep and Times: Times-=1 C=L+(R-L)/2 if cond(C): L=C else: R=C return L #================================================ def check(w): U=Union_Find(N+1) for s,t,d in E: if w<=d: U.union(s,t) return U.same(1,N) #================================================ import sys input=sys.stdin.readline N,M=map(int,input().split()) E=[] for _ in range(M): s,t,d=map(int,input().split()) E.append((s,t,d)) W=General_Binary_Decrease_Search(0,10**9,check) G=Graph(list(range(1,N+1))) for s,t,d in E: if W<=d: G.add_edge(s,t) print(W,G.distance(1,N))