#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const int Maxn = 1005;
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
struct pos {
  int first, second, third;
};
int n, m;
vector<int> v;
vector<int> cri;
vector<int> ans;
vector<bool> u;
bool cmp(int i, int j) { return i > j; }
void dfs(int now, int t, int f, int c) {
  if (t > m || f > (n - m)) return;
  if (c > 1) return;
  if (now == n) {
    if (c)
      for (int(i) = 1; (i) <= (int)(n); i++) {
        ans[i] |= (cri[abs(v[i])] == v[i] / abs(v[i])) + 1;
      }
    return;
  } else {
    now++;
    if (!u[abs(v[now])]) {
      cri[abs(v[now])] = v[now] / abs(v[now]);
      u[abs(v[now])] = true;
      int c1 = c, c2 = c;
      if (v[now] / abs(v[now]) == 1)
        c1++;
      else
        c2++;
      dfs(now, t + 1, f, c1);
      cri[abs(v[now])] *= -1;
      dfs(now, t, f + 1, c2);
      cri[abs(v[now])] *= -1;
      u[abs(v[now])] = false;
    } else {
      cri[abs(v[now])] == v[now] / abs(v[now]) ? dfs(now, t + 1, f, c)
                                               : dfs(now, t, f + 1, c);
    }
  }
}
int main() {
  map<int, int> mp1;
  map<int, int> mp2;
  scanf("%d%d", &n, &m);
  cri.resize(n + 1);
  ans.resize(n + 1);
  u.resize(n + 1);
  for (int(i) = 1; (i) <= (int)(n); i++) cri[i] = -1;
  v.push_back(INF);
  for (int(i) = 1; (i) <= (int)(n); i++) {
    int a;
    scanf("%d", &a);
    v.push_back(a);
    mp1[a] = i;
    cri[abs(a)] = a / abs(a);
  }
  sort((v).begin(), (v).end(), cmp);
  for (int(i) = 1; (i) <= (int)(n); i++) mp2[mp1[v[i]]] = i;
  cri[abs(v[1])] = v[1] / abs(v[1]);
  u[abs(v[1])] = true;
  int c1 = 0, c2 = 0;
  if (cri[abs(v[1])] == 1)
    c1++;
  else
    c2++;
  dfs(1, 1, 0, c1);
  cri[abs(v[1])] *= -1;
  dfs(1, 0, 1, c2);
  map<int, string> lge;
  lge[0] = "Lie";
  lge[1] = "Lie";
  lge[2] = "Truth";
  lge[3] = "Not defined";
  for (int(i) = 1; (i) <= (int)(n); i++)
    printf("%s\n", lge[ans[mp2[i]]].c_str());
  return 0;
}
