/* Rozwiazanie wzorcowe do zadania Skierowanie
 * Autor: Jakub Radoszewski
 * Opis: dwukolorowanie grafu.
 */

#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;

const int M = 500010;
int n, m;
vector<int> t[M];
int kolor[M];

bool dfs(int v, int k) {
  kolor[v] = k;
  int k1 = 3 - k;
  for (int i = 0; i < (int)t[v].size(); ++i) {
    int u = t[v][i];
    if (kolor[u] && kolor[u] != k1) return false;
    else if (!kolor[u]) {
      if (!dfs(u, k1)) return false;
    }
  }
  return true;
}

bool dwukolor() {
  for (int i = 0; i < n; ++i)
    if (!kolor[i] && !dfs(i, 1))
      return false;
  return true;
}

int main() {
  scanf("%d%d", &n, &m);
  while (m--) {
    int a, b;
    scanf("%d%d", &a, &b);
    --a; --b;
    t[a].push_back(b);
    t[b].push_back(a);
  }
  puts(dwukolor() ? "TAK" : "NIE");
  return 0;
}
