#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct e{int from,to,cost;}e;
int N,M,p[105],R,i,j,t,mx,mn;
e E[5000];
void in()
{
	int i;
	for(i=0;i<105;i++)p[i]=i;
}

int pa(int n)
{
	return p[n]==n?n:pa(p[n]);
}

int sa(int a,int b)
{
	return pa(a)==pa(b);
}

int co(const void *a,const void *b)
{
	e *x=(e*)a,*y=(e*)b;
	return x->cost<y->cost;
}

int main()
{
	for(;scanf("%d%d",&N,&M),N|M;)
	{
		memset(E,0,sizeof(E));
		for(i=0;i<M;i++)
		{
			scanf("%d%d%d",&E[i].from,&E[i].to,&E[i].cost);
		}
		qsort(E,M,sizeof(e),co);
		R=1<<25;
		for(i=0;i<M;i++)
		{
			in();
			mx=-(1<<25),mn=(1<<25);
			for(j=i;j<M;j++)
			{
				if(!sa(E[j].from,E[j].to))
				{
					mx=mx<E[j].cost?E[j].cost:mx;
					mn=mn>E[j].cost?E[j].cost:mn;
					p[pa(E[j].from)]=pa(E[j].to);
				}
			}
			for(j=1;j<=N;j++)
				if(pa(j)!=pa(1))
					break;
			if(j==N+1)
				R=R<mx-mn?R:mx-mn;
		}
		printf("%d\n",R==1<<25?-1:R);
	}
	return 0;
}