#include <bits/stdc++.h>
using namespace std;
long long N,M;
long long islr[102][102];
struct act{
long long j;
long long s;
long long t;
long long u;
long long v;
long long e;
};
act action[5002];
void xiu(long long i){
for(long long k = 1 ; k<=N ;k++){
for(long long p = 1 ;p <=N ;p++){
for(long long q=1; q<=N ;q++){
if(islr[p][q]>islr[p][k]+islr[k][q]){
islr[p][q]=islr[p][k]+islr[k][q];
islr[q][p]=islr[p][k]+islr[k][q];
}
}
}
}
}
void dij(long long i){
for(long long k = 1 ; k<=N ;k++){
for(long long p = 1 ;p <=N ;p++){
for(long long q=1; q<=N ;q++){
if(islr[p][q]>islr[p][k]+islr[k][q]){
islr[p][q]=islr[p][k]+islr[k][q];
islr[q][p]=islr[p][k]+islr[k][q];
}
}
}
}
long long minn =999999;
if(minn>islr[action[i].s][action[i].t]){
minn=islr[action[i].s][action[i].t];
cout<<minn<<endl;
}
if(minn >= 999999){
cout<<-1<<endl;
}
}
int main(){
cin>>N>>M;
for(long long i = 1; i<=M ;i++){
act store;
long long a,b,c,d,f,g;
cin>>a;
if(a==0){
store.j=a;
cin>>b;
cin>>c;
store.s=b;
store.t=c;
}else{
store.j=a;
cin>>d>>f>>g;
store.u=d;
store.v=f;
store.e=g;
}
action[i]=store;
}
for(long long i = 1;i<=N;i++){
for(long long j = 1 ;j<=N;j++){
if(i!=j){
islr[i][j]=999999;
}
}
}
for(long long i = 1;i<=M ;i++){
if (action[i].j==1){
islr[action[i].u][action[i].v]=action[i].e;
islr[action[i].v][action[i].u]=action[i].e;
xiu(i);
}else{
dij(i);
}
}
}