#include<iostream>
#include<algorithm>
#define F 114514*1000
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
int n,k,f,t,a,b;
int q[1000],x[1000],head,tail;
int g[100][100],r[100];
void BFS(int p,int y){
	rep(i,n)if(y+g[p][i]<r[i])q[tail]=i,x[tail]=y+g[p][i],r[i]=x[tail],tail++;
	return;
}
int main(){
	while(true){
	cin>>n>>k;
	if(!n&&!k)break;
	rep(i,n)rep(j,n)g[i][j]=F;
	rep(u,k){
		cin>>t>>a>>b;
		a--,b--;
		if(t){
			cin>>t;
			g[a][b]=min(t,g[a][b]),g[b][a]=g[a][b];
		}
		else{
			rep(i,n)r[i]=F;
			head=0,tail=1,q[0]=a,x[0]=0;
			while(true){
				if(head==tail)break;
				BFS(q[head],x[head]);
				head++;
			}
			if(r[b]==F)r[b]=-1;
			cout<<r[b]<<endl;
		}
	}
	}
	return 0;
}