#include <iostream>
#include <algorithm>

#define frs first
#define scn second
#define mkp make_pair

using namespace std;

typedef long long ll;
typedef pair< int, ll > Pr;

int N, M;
Pr nset[100010];

void soups_on();
void union_set(int, int, ll);
Pr find_set(int);

int main() {
  ios::sync_with_stdio(false);
  while (cin >> N >> M, N + M)
    soups_on();

  return 0;
}

void soups_on() {
  char c;
  int a, b;
  ll w;

  fill(&nset[0], &nset[N + 1], mkp(-1, 0));
  for (int i = 0; i < M; ++i) {
    cin >> c >> a >> b;
    if (c == '!') {
      cin >> w;
      union_set(a, b, w);
    }
    else {
      Pr pa = find_set(a), pb = find_set(b);
      if (pa.frs == pb.frs)
        cout << pa.scn - pb.scn << "\n";
      else
        cout << "UNKNOWN\n";
    }
  }
}

void union_set(int x, int y, ll w) {
  if (find_set(x).frs != find_set(y).frs) {
    Pr px = find_set(x), py = find_set(y);
    nset[py.frs] = mkp(px.frs, -w + px.scn - py.scn);
  }
}

Pr find_set(int x) {
  if (nset[x].frs == -1)
    return mkp(x, 0);
  else {
    Pr px = find_set(nset[x].frs);
    return nset[x] = mkp(px.frs, nset[x].scn + px.scn);
  }
}