// zadanie Autostrada
// ASD -- egzamin poprawkowy, 2014/2015
// rozwiazanie wzorcowe

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

#define MAX_N 500000
#define MAX_B 524288

char state[MAX_B];

// liczba barierek
int itree[MAX_B+MAX_B][2][2];

int N, M;

void computeItree(int at) {
  if(at >= MAX_B) {
    char c = state[at-MAX_B];
    itree[at][0][0] = (c&2) ? 1 : 0;
    itree[at][0][1] = (c&3) ? 1 : 0;
    itree[at][1][0] = (c&5) ? 1 : 0;
    itree[at][1][1] = (c&4) ? 1 : 0;
    }
  else {
    int at0 = (at<<1), at1 = at0|1;
    for(int a=0; a<2; a++) for(int b=0; b<2; b++)
      itree[at][a][b] = 
        min(
          itree[at0][a][0] + itree[at1][0][b],
          itree[at0][a][1] + itree[at1][1][b]
          );
    }
  }

void switchB(int n, int t) {
  state[n] ^= (1<<t);
  n += MAX_B;
  while(n) computeItree(n), n>>=1;
  }

int scanerr;

int main() {
  scanerr=scanf("%d%d", &N, &M);
  for(int i=N; i<MAX_B; i++)
    state[i] = 1;

  for(int i=2*MAX_B-1; i>=0; i--)
    computeItree(i);
  
  for(int i=0; i<M; i++) {
    int n, t;
    scanerr = scanf("%d%d", &n, &t);
    switchB(n, t);
/*  for(int u=0; u<4; u++) {
      for(int z=0; z<8; z++) printf("%d ", itree[MAX_B+z][u>>1][u&1]);
      printf("\n");
      } */
    if(itree[1][0][0] == 0 || itree[1][0][1] == 0 || itree[1][1][0] == 0 || itree[1][1][1] == 0)
      printf("TAK\n");
    else
      printf("NIE\n");
    }
  return 0;
  }
