#include <stdio.h>
#define MAXN 2000
typedef struct {
int l, c;
} point;
char mat[MAXN + 2][MAXN + 2];
point q[MAXN * MAXN];
int dl[]= {0,0,-1,1};
int dc[]= {-1,1,0,0};
void bord(int r1, int c1, int r2, int c2) {
for (int i = r1; i <= r2; i++) {
mat[i][c1] = mat[i][c2] = 1;
}
for (int i = c1 + 1; i < c2; i++) {
mat[r1][i] = mat[r2][i] = 1;
}
}
/*void lee(int l, int c, int m1, int m2) {
int cs,cd,lin,col,auxl,auxc;
q[0].l=l;
q[0].c=c;
mat[l][c] = m2;
cs=0;
cd=1;
while (cs<cd) {
lin = q[cs].l;
col = q[cs].c;
cs++;
for (int d=0;d<4; d++) {
int auxl = lin + dir[d].l, auxc = col + dir[d].c;
if (mat[auxl][auxc]==m1) {
mat[auxl][auxc] = m2;
q[cd].l=auxl;
q[cd].c=auxc;
cd++;
}
}
}
}*/
void fill(int l,int c,int m1,int m2) {
if(mat[l][c]==m1) {
mat[l][c]=m2;
for(int i=0; i<4; i++) {
fill(l+dl[i],c+dc[i],m1,m2);
}
}
}
int test(int l1, int c1, int l2, int c2) {
if ((mat[l1][c1]==1)||(mat[l2][c2]==1)) {
return 0;
}
fill(l1, c1, 0, 2);
char result = (mat[l2][c2] == 2);
fill(l1, c1, 2, 0);
return result;
}
int main() {
FILE *fin,*fout;
int n, q,type, l1, c1, l2, c2;
fin = fopen("virus2.in", "r");
fout = fopen("virus2.out", "w");
fscanf(fin, "%d %d", &n, &q);
bord(0,0,n+1,n+1);
for (int i=0; i<q; i++) {
fscanf(fin, "%d %d %d %d %d", &type, &l1, &c1, &l2, &c2);
if (type == 1) {
bord(l1, c1, l2, c2);
} else {
fprintf(fout,test(l1, c1, l2, c2)==1 ? "DA\n" : "NU\n");
}
}
fclose(fin);
fclose(fout);
return 0;
}