항목이 [1, 2^k)에 속하는 길이 n 정수 수열 중 접두사 비트 OR 값이 순증가하는 수열의 개수를 구한다. n은 1e18, k는 30000까지이다.
수열 A=a1,a2,…,anA = a_1, a_2, \dots, a_nA=a1,a2,…,an에 연산 PPP를 적용하면 수열 B=b1,b2,…,bnB = b_1, b_2, \dots, b_nB=b1,b2,…,bn이 된다. 이때 bi=a1∣a2∣⋯∣aib_i = a_1 \mathbin{|} a_2 \mathbin{|} \cdots \mathbin{|} a_ibi=a1∣a2∣⋯∣ai이고, ∣|∣는 비트 OR 연산이다.
111 이상 2k2^k2k 미만의 정수로 이루어진 길이 nnn의 수열 전체에 연산 PPP를 적용한다. 결과가 오름차순, 즉 b1<b2<⋯<bnb_1 < b_2 < \cdots < b_nb1<b2<⋯<bn이 되는 수열의 개수를 구하는 프로그램을 작성하시오.
첫째 줄에 nnn과 kkk가 공백으로 구분되어 주어진다. (1≤n≤10181 \le n \le 10^{18}1≤n≤1018, 1≤k≤300001 \le k \le 300001≤k≤30000)
첫째 줄에 조건을 만족하는 수열의 개수를 109+710^9+7109+7로 나눈 나머지를 출력한다.