public int maxEnvelopes(int[][] envelopes) {
        if(envelopes==null) return 0;
        if(envelopes.length<=1) return envelopes.length;
        int[] aux=new int[envelopes.length];
        Arrays.fill(aux,1);
        Arrays.sort(envelopes, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0]!=o2[0]) return o1[0]-o2[0];
                return o1[1]-o2[1];
            }
        });
        for(int i=1;i<aux.length;++i){
            int[] now=envelopes[i];
            for(int j=0;j<i;++j){
                int[] left=envelopes[j];
                if(now[0]>left[0] && now[1]>left[1]){
                    aux[i]=Math.max(aux[i],aux[j]+1);
                }
            }
        }
        int max=1;
        for(int i : aux) max=Math.max(i,max);
        return max;
    }