#include "bits/stdc++.h"
using namespace std;

class WeightedUF
{
	public:
	vector<int> data;
	vector<int> diff_weight;

	WeightedUF(int s):data(s,-1),diff_weight(s,0){}

	//y-x=w
	bool unite(int x,int y,int w)
	{
		w+=weight(x);
		w-=weight(y);
		x=find(x);
		y=find(y);
		bool isunion=(x!=y);
		if(isunion)
		{
			if(data[x]>data[y])
			{
				swap(x,y);
				w=-w;
			}
			data[x]+=data[y];
			data[y]=x;
			diff_weight[y]=w;
		}
		return isunion;
	}

	int find(int x)
	{
		if(data[x]<0)
			return x;
		else{
			int par=data[x];
			data[x]=find(data[x]);
			diff_weight[x]+=diff_weight[par];
			return data[x];
		}
	}
	int weight(int x)
	{
		find(x);
		return diff_weight[x];
	}
	bool same(int x,int y)
	{
		return find(x)==find(y);
	}
};

int main()
{
	while(1)
	{
		int n,m;
		cin>>n>>m;
		if(n==0)
			break;
		WeightedUF u=WeightedUF(n);
		for(int i=0;i<m;i++)
		{
			char q;
			cin>>q;
			if(q=='!')
			{
				int a,b,w;
				cin>>a>>b>>w;
				a--;b--;
				u.unite(a,b,w);
			}else{
				int a,b;
				cin>>a>>b;
				a--;b--;
				if(!u.same(a,b))
					cout<<"UNKNOWN"<<endl;
				else
					cout<<u.weight(b)-u.weight(a)<<endl;
			}
		}
	}
	return 0;
}
