#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, w[2505][2505], dis[10005], v[10005], pre[10005], road[10005], len, x, y;
int ans=1e12, q;
void dij(int s) {
for(int i=0; i<=n; i++) {
dis[i]=1e12;
v[i]=0;
}
dis[s]=0;
for(int i=1; i<=n; i++) {
int u=0;
for(int j=1; j<=n; j++)
if(v[j]==0&&dis[j]<dis[u])
u=j;
if(u==0)break ;
v[u]=true;
for(int j=1; j<=n; j++) {
if(w[u][j]&&dis[j]>dis[u]+w[u][j]) {
dis[j]=dis[u]+w[u][j];
}
}
}
}
signed main(){
cin>>n>>q;
memset(w, 0x3f, sizeof(w));
for(int i=1; i<=q; i++) {
int t;
cin>>t;
if(t==0) {
int u, v;
cin>>u>>v;
dij(u);
if(dis[v]==1e12) printf("-1\n");
else
printf("%lld\n", dis[v]);
}
else {
int u, v, c;
cin>>u>>v>>c;
w[u][v]=min(w[u][v], c);
w[v][u]=min(c, w[v][u]);
}
}
return 0;
}