#include <bits/stdc++.h> #define M 100005 #define INF 100000; using namespace std; int x,y,i,cent,n,fa[M],que[M],t,ii,ans,a,s,m,j,nn,mins,vis; struct edge{ int u; int v; int w; bool operator <(const edge &t)const { return w<t.w; } }es[M]; int findloot(int kk) { while(fa[kk]!=0) que[++t]=kk,kk=fa[kk]; while(t>0) fa[que[t--]]=kk; return kk; } void lianhe(int a,int b) { int l=findloot(a); int r=findloot(b); if(l!=r) fa[l]=r; } int main(){ while(~scanf("%d%d",&n,&m)) { if(n==0&&m==0) break; ans=INF;vis=0;cent=0; memset(es,0,sizeof(es)); for(i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&a); es[cent].u=x,es[cent].v=y,es[cent++].w=a; } sort(es,es+cent-1); for(j=0;j<cent;j++) { memset(fa,0,sizeof(fa)); mins=es[j].w; nn=n; for(i=j;i<cent;i++) { if(findloot(es[i].u)!=findloot(es[i].v)) { lianhe(es[i].u,es[i].v); nn--; } if(nn==1) { vis=1; ans=min(ans,es[i].w-mins); break;//zhiyi } } } if(vis==1) printf("%d\n",&ans); else cout<<-1; } }