import java.io.*;
import java.util.*;
public class triangularlogs_xiaowuc1 {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
    StringTokenizer st = new StringTokenizer(br.readLine());
    int n = Integer.parseInt(st.nextToken());
    int q = Integer.parseInt(st.nextToken());
    int[][] v = new int[n][3];
    LongArrayList xv = new LongArrayList();
    for(int i = 0; i < n; i++) {
      st = new StringTokenizer(br.readLine());
      v[i][0] = Integer.parseInt(st.nextToken());
      v[i][1] = Integer.parseInt(st.nextToken());
      v[i][2] = Integer.parseInt(st.nextToken());
      xv.add(v[i][0]);
    }
    {
      xv.sort();
      for(int i = 0; i < n; i++) {
        v[i][0] = xv.lowerBound(v[i][0]);
      }
    }
    RageTree rt = new RageTree(xv.size());
    for(int i = 0; i < n; i++) {
      long val = v[i][1];
      val <<= 30;
      val |= v[i][2];
      rt.ins(v[i][0], val);
    }
    rt.finalize();
    int[] cand = new int[45];
    while(q-- > 0) {
      st = new StringTokenizer(br.readLine());
      int xa = Integer.parseInt(st.nextToken());
      int ya = Integer.parseInt(st.nextToken());
      int xb = Integer.parseInt(st.nextToken());
      int yb = Integer.parseInt(st.nextToken());
      xa = xv.lowerBound(xa);
      xb = xv.upperBound(xb)-1;
      int amt = rt.qry(xa, xb, ya, yb, cand);
      if(amt == 45) {
        pw.println(1);
        continue;
      }
      Arrays.sort(cand, 0, amt);
      int ret = 0;
      for(int i = 2; i < amt && ret == 0; i++) if(cand[i] < cand[i-1] + cand[i-2]) ret = 1;
      pw.println(ret);
    }
    pw.close();
  }
  static class RageTree {
    LongArrayList[] tree;
    int SZ;
    public RageTree(int n) {
      SZ = 1;
      while(SZ < n) SZ *= 2;
      tree = new LongArrayList[2*SZ];
      for(int i = 0; i < tree.length; i++) tree[i] = new LongArrayList();
    }
    public void ins(int idx, long val) {
      idx += SZ;
      while(idx > 0) {
        tree[idx].add(val);
        idx /= 2;
      }
    }
    public void finalize() {
      for(int i = 1; i < tree.length; i++) tree[i].sort();
    }
    static final int BOTTOM = (1<<30)-1;
    private int upd(LongArrayList v, int ya, int yb, int[] ret, int amt) {
      if(amt == 45) return amt;
      int idx = v.lowerBound(((long)ya)<<30);
      while(idx < v.size()) {
        long val = v.get(idx++);
        if((val>>30) <= yb) ret[amt++] = (int)(val&BOTTOM);
        if(amt == 45) return amt;
      }
      return amt;
    }
    public int qry(int lhs, int rhs, int ya, int yb, int[] ret) {
      lhs += SZ;
      rhs += SZ;
      int amt = 0;
      while(lhs <= rhs && amt < 45) {
        if(lhs%2!=0) amt = upd(tree[lhs++], ya, yb, ret, amt);
        if(rhs%2==0) amt = upd(tree[rhs--], ya, yb, ret, amt);
        lhs /= 2;
        rhs /= 2;
      }
      return amt;
    }
  }
  static class LongArrayList {
    long[] list;
    int numElems = 0;
    public LongArrayList() {
      list = new long[1];
    }
    public void add(long val) {
      if(numElems == list.length) {
        long[] newList = new long[2 * list.length];
        for(int i = 0; i < list.length; i++) newList[i] = list[i];
        list = newList;
      }
      list[numElems++] = val;
    }
    public long get(int idx) {
      return list[idx];
    }
    public int size() {
      return numElems;
    }
    public int lowerBound(long val) {
      if(numElems == 0 || list[numElems-1] < val) return numElems;
      int lhs = 0;
      int rhs = numElems-1;
      while(lhs < rhs) {
        int mid = (lhs+rhs)/2;
        if(list[mid] >= val) rhs = mid;
        else lhs = mid+1;
      }
      return lhs;
    }
    public int upperBound(long val) {
      if(numElems == 0 || list[numElems-1] <= val) return numElems;
      int lhs = 0;
      int rhs = numElems-1;
      while(lhs < rhs) {
        int mid = (lhs+rhs)/2;
        if(list[mid] > val) rhs = mid;
        else lhs = mid+1;
      }
      return lhs;
    }
    public void sort() {
      Arrays.sort(list, 0, numElems);
    }
  }
}