import sys

# Tăng giới hạn đệ quy cho an toàn, dù độ sâu cây chỉ khoảng 60
sys.setrecursionlimit(2000)

def solve():
    # Đọc dữ liệu từ input chuẩn (hoặc thay bằng giá trị cụ thể để test)
    # Ví dụ input: 10 2
    try:
        line = sys.stdin.readline()
        if not line:
            return
        parts = list(map(int, line.split()))
        if len(parts) < 2:
            return
        n = parts[0]
        k = parts[1]
    except ValueError:
        return

    # Nếu k = 0, theo định nghĩa đường đi 0 cạnh là 1 điểm, có n đường.
    # Nhưng thường bài toán đường đi k cạnh yêu cầu k > 0.
    if k == 0:
        print(n)
        return

    # Cache cho các cây con hoàn hảo
    # perfect_memo[h] lưu số đường đi độ dài k trong một cây nhị phân hoàn hảo chiều cao h
    perfect_memo = {}

    def get_perfect_paths(h):
        if h < 0: return 0
        if h in perfect_memo:
            return perfect_memo[h]
        
        # Nếu chiều cao cây nhỏ hơn k, không thể chứa đường đi độ dài k?
        # Không hẳn, đường đi có thể ngắn hơn chiều cao cây.
        # Nhưng ở đây ta đếm đường đi CÓ ĐỘ DÀI ĐÚNG BẰNG k.
        # Nếu h < k/2 (xấp xỉ), có thể không có, nhưng để đơn giản ta dùng công thức đệ quy.
        
        # Công thức: Tổng đường đi trong cây con trái + cây con phải + đường đi qua gốc
        # Trong cây hoàn hảo, cây con trái và phải đều là cây hoàn hảo chiều cao h-1.
        cnt = 2 * get_perfect_paths(h - 1)
        
        # Cộng thêm các đường đi nhận gốc làm LCA
        # 1. Đi thẳng xuống 1 nhánh k bước (chỉ khi h >= k)
        # Có 2 nhánh (trái/phải). Mỗi nhánh tại độ sâu k có 2^k nút (nếu gốc là độ sâu 0).
        # Trong cây hoàn hảo, số nút ở độ sâu d là 2^d.
        if h >= k:
            # Gốc -> trái -> ... (k cạnh): có 2^(k-1) đường (vì nút đích ở độ sâu k so với gốc)
            # SAI. Nút đích ở độ sâu k. Có 2^k nút ở độ sâu k? Không.
            # Trong cây hoàn hảo, ở độ sâu d có 2^d nút.
            # Đường đi từ gốc đến 1 nút ở độ sâu k là duy nhất cho mỗi nút đích.
            # Vậy có 2^k nút đích -> 2^k đường đi bắt đầu từ gốc?
            # Không, từ gốc đi xuống k bước.
            # Nút ở độ sâu k có 2^k cái. Mỗi cái tương ứng 1 đường đi từ gốc.
            # Vậy có 2^k đường đi bắt đầu từ gốc có độ dài k.
            pass

        # Tính chính xác phần đi qua gốc (LCA):
        # Chia k bước thành: x bước bên trái, k-x bước bên phải.
        # x chạy từ 0 đến k.
        # Nếu x=0: Gốc -> Phải k bước. Số cách = số nút ở độ sâu k-1 bên nhánh phải = 2^(k-1). (Điều kiện k <= h)
        # Nếu x=k: Gốc -> Trái k bước. Số cách = số nút ở độ sâu k-1 bên nhánh trái = 2^(k-1). (Điều kiện k <= h)
        # Nếu 0 < x < k: Trái (x bước) và Phải (k-x bước).
        #   Số cách = (nút sâu x-1 bên trái) * (nút sâu k-x-1 bên phải)
        #           = 2^(x-1) * 2^(k-x-1) = 2^(k-2).
        #   Điều kiện: x <= h và k-x <= h.
        
        ways_via_root = 0
        
        # Case đi thẳng 1 nhánh (x=0 hoặc x=k)
        if h >= k:
            ways_via_root += 2 * (2**(k-1)) # 2 nhánh, mỗi nhánh 2^(k-1) đích
            
        # Case rẽ 2 nhánh (0 < x < k)
        # Cần đếm số lượng x sao cho: 1 <= x <= k-1 AND x <= h AND k-x <= h
        # Tức là: max(1, k-h) <= x <= min(k-1, h)
        low = max(1, k - h)
        high = min(k - 1, h)
        
        if low <= high:
            count_valid_splits = high - low + 1
            ways_via_root += count_valid_splits * (2**(k-2))
            
        cnt += ways_via_root
        perfect_memo[h] = cnt
        return cnt

    # Hàm đếm số nút trong cây con gốc u ở độ sâu d (tương đối)
    def count_nodes_at_depth(u, d):
        if d < 0: return 0
        if d == 0: return 1
        
        # Nút đầu tiên và cuối cùng ở độ sâu d trong cây con u
        # Chỉ số toàn cục: [u * 2^d, u * 2^d + 2^d - 1]
        # Cần dùng bit shift cẩn thận để tránh tạo số quá lớn không cần thiết,
        # nhưng Python xử lý BigInt tốt.
        
        # Kiểm tra nhanh: nếu u quá lớn so với n thì 0
        # u * 2^d > n
        # Bit length check
        if u.bit_length() + d > n.bit_length() + 1: # ước lượng
             return 0
             
        first = u << d
        if first > n:
            return 0
        last = first + (1 << d) - 1
        
        if last <= n:
            return (1 << d)
        else:
            return max(0, n - first + 1)

    total_paths = 0

    # Hàm duyệt cây
    def traverse(u):
        nonlocal total_paths
        if u > n:
            return
        
        # 1. Tính đóng góp của u với tư cách là LCA
        # Ta cần tính tổng: count(left, x-1) * count(right, k-x-1)
        # Tối ưu: count_nodes_at_depth thực ra tốn chi phí log.
        # Vòng lặp k lần. Tổng chi phí O(k * log n). 
        # Với k lớn, ta có thể tối ưu hơn, nhưng thường k <= 60-100 trong các bài toán cây này.
        # Nếu k quá lớn (> 120), số đường đi là 0 (vì chiều cao cây ~ 60).
        if k > 130: # Chiều cao cây 10^18 < 60. Đường đi tối đa ~ 120.
            return 

        ways = 0
        # Case: Gốc -> Trái x, Phải k-x
        # x = 0: Gốc -> Phải k
        # x = k: Gốc -> Trái k
        
        # Pre-calculate counts to avoid re-calling logic? 
        # No, direct is fine.
        
        # Loop x from 0 to k
        for x in range(k + 1):
            left_len = x
            right_len = k - x
            
            c_left = 0
            c_right = 0
            
            # Left branch contribution
            if left_len == 0:
                c_left = 1 # Đại diện chính nút u
            else:
                c_left = count_nodes_at_depth(2*u, left_len - 1)
            
            if c_left == 0: continue
            
            # Right branch contribution
            if right_len == 0:
                c_right = 1
            else:
                c_right = count_nodes_at_depth(2*u + 1, right_len - 1)
                
            if c_right > 0:
                if left_len == 0 and right_len == 0: 
                    continue # Độ dài 0, không tính (hoặc tính là 0 đường)
                
                # Lưu ý: nếu left_len > 0 và right_len > 0 thì đây là đường đi ghép
                # Nếu 1 trong 2 bằng 0 thì là đường đi thẳng.
                # Logic count_nodes đã đếm số nút đích. Mỗi nút đích ứng với 1 đường đi duy nhất từ u.
                # Nên ta nhân số lượng đích.
                ways += c_left * c_right

        total_paths += ways

        # 2. Kiểm tra xem cây con hiện tại có phải là cây hoàn hảo không để cắt tỉa
        # Kiểm tra cây hoàn hảo "đủ lớn" để chứa các đường đi còn lại
        # Thực ra chỉ cần kiểm tra: cây con u có phải là cây hoàn hảo chiều cao H nào đó không.
        # Cách kiểm tra: 
        # Nút u có chiều cao H trong cây hoàn hảo nếu:
        # (u << H) + (1 << H) - 1 <= n  (Nút phải cùng lớp H nằm trong n)
        # VÀ (u << (H+1)) > n           (Lớp H+1 không có nút nào - tức là cây kết thúc chính xác tại H)
        
        # Tìm chiều cao tối đa có thể của u
        # Max depth của toàn bộ cây ~ 60
        # Ta thử tìm H sao cho cây con u là cây hoàn hảo chiều cao H
        
        # Ước lượng chiều cao từ u đến đáy:
        # bit_len(n) - bit_len(u)
        
        h_est = n.bit_length() - u.bit_length()
        
        # Kiểm tra h_est
        if h_est >= 0:
            # Kiểm tra xem có phải hoàn hảo chiều cao h_est không
            right_leaf = (u << h_est) + (1 << h_est) - 1
            next_left = u << (h_est + 1)
            
            if right_leaf <= n and next_left > n:
                # Chính xác là cây hoàn hảo chiều cao h_est
                # Tuy nhiên, ta đã tính LCA tại u rồi.
                # Ta cần cộng số đường đi nằm TRỌN trong con trái và con phải.
                # get_perfect_paths(h_est) bao gồm cả đường đi qua LCA (gốc u).
                # NÊN: ta cộng get_perfect_paths(h_est) rồi TRỪ đi phần LCA đã tính?
                # Hay là return luôn?
                # get_perfect_paths tính TOÀN BỘ đường đi trong cây con.
                # Hàm traverse hiện tại đang tính LCA(u) rồi gọi đệ quy con.
                # Nếu ta return get_perfect_paths(h_est) thì ta phải KHÔNG tính LCA(u) ở trên, hoặc trừ đi.
                # Cách dễ nhất: Đừng tính LCA ở trên nếu phát hiện là cây hoàn hảo.
                # Nhưng code đã tính rồi.
                # Logic lại:
                # Check perfect trước. Nếu perfect -> return DP.
                # Nếu không -> Tính LCA, recurse.
                pass 
                
    # Viết lại hàm traverse gọn hơn với logic check trước
    def traverse_optimized(u):
        nonlocal total_paths
        if u > n: return

        # Check perfect tree
        h_est = n.bit_length() - u.bit_length()
        is_perfect = False
        if h_est >= 0:
            right_leaf = (u << h_est) + (1 << h_est) - 1
            next_left = u << (h_est + 1)
            if right_leaf <= n and next_left > n:
                total_paths += get_perfect_paths(h_est)
                return
        
        # Nếu không perfect (hoặc là perfect nhưng bị cắt cụt dưới), tính thủ công
        # 1. LCA contribution
        ways = 0
        if k <= 130:
            for x in range(k + 1): # x là số cạnh bên trái
                # Nếu x=0: đi thẳng phải k cạnh.
                # Nếu x=k: đi thẳng trái k cạnh.
                # Nếu 0<x<k: trái x, phải k-x.
                
                # Số cạnh bên trái là x => cần nút ở độ sâu x (tương đối u) ? 
                # Không, nút ở độ sâu x tương đối u là ĐẦU MÚT.
                # Đường đi từ u đến nút độ sâu x có độ dài x.
                # Vậy ta cần tìm số nút ở độ sâu x bên trái (tức là độ sâu x-1 tính từ con trái 2u).
                
                count_L = 0
                count_R = 0
                
                if x == 0:
                    count_L = 1 # u
                else:
                    count_L = count_nodes_at_depth(2*u, x - 1)
                
                if count_L == 0: continue
                
                if k - x == 0:
                    count_R = 1 # u
                else:
                    count_R = count_nodes_at_depth(2*u + 1, (k - x) - 1)
                    
                if count_R > 0:
                    # Nếu cả 2 đều là u (k=0), ways += 1. 
                    # Nhưng loop chạy 1 lần x=0. countL=1, countR=1 -> ways+=1. Đúng.
                    # Nếu k > 0.
                    # x=0: L=1, R=cnt(right, k-1). ways += cnt. Đúng (đường đi thẳng phải).
                    # x=k: L=cnt(left, k-1), R=1. ways += cnt. Đúng (đường đi thẳng trái).
                    # 0<x<k: ways += L * R. Đúng.
                    ways += count_L * count_R
            
            # Trừ đi trường hợp x=0 và x=k đếm trùng u? 
            # Không. x=0 nghĩa là đường đi nằm hẳn bên phải u (bắt đầu từ u).
            # x=k nghĩa là đường đi nằm hẳn bên trái u.
            # Chúng là các tập đường đi rời nhau.
            
            # Tuy nhiên, nếu k=0. Loop x=0. L=1, R=1. ways=1.
            # Nhưng ở đầu ta đã handle k=0 -> n.
            # Với k > 0, x=0 và x=k là các đường đi khác nhau.
            # Nhưng lưu ý: Logic trên tính số cặp (u, v) hay số đường đi?
            # Đường đi vô hướng.
            # Cách tính trên là "đếm số đường đi có đỉnh cao nhất là u".
            # Với x=0: Đường u -> ... -> v (bên phải). LCA là u.
            # Với x=k: Đường u -> ... -> v (bên trái). LCA là u.
            # Với 0<x<k: v1 <- ... <- u -> ... -> v2. LCA là u.
            # Tất cả đều có LCA là u duy nhất. Không bị trùng.
            pass
            
        total_paths += ways
        
        # 2. Recurse
        traverse_optimized(2*u)
        traverse_optimized(2*u + 1)

    traverse_optimized(1)
    print(total_paths)

if __name__ == '__main__':
    solve()