#include <iostream>

#define INF 1e9
using namespace std;

int main(){
  int n,k,q,a,b,e;
  long r[101][101];
  while(cin>>n>>k,n||k){
    for(int i=1;i<=n;++i){
      for(int j=1;j<=n;++j) r[i][j]=INF;
    }
    for(int i=0;i<k;++i){
      cin>>q;
      if(q){
	cin>>a>>b>>e;
	if(r[a][b]>e) r[a][b]=r[b][a]=e;
      }
      else{
	bool ud[n+1];
	long d[n+1];
	for(int j=1;j<=n;++j){
	  d[j]=INF;ud[j]=false;
	}
	cin>>a>>b;
	d[a]=0;
	while(1){
	  int v=-1;
	  for(int j=1;j<=n;++j){
	    if(!ud[j]&&(v==-1||d[j]<d[v])) v=j;
	  }
	  if(v==-1) break;
	  ud[v]=true;
	  for(int j=1;j<=n;++j){
	    d[j]=min(d[j],d[v]+r[v][j]);
	  }
	}
	cout<<((d[b]>=INF)?-1:d[b])<<endl;
      }
    }
  }
  return 0;
}