description: You are given n integers a_1, a_2, …, a_n and an integer k. Find the maximum value of i ⋅ j - k ⋅ (a_i | a_j) over all pairs (i, j) of integers with 1 ≤ i < j ≤ n. Here, | is the [bitwise OR operator](https://en.wikipedia.org/wiki/Bitwise_operation#OR).
  
  Input
  
  The first line contains a single integer t (1 ≤ t ≤ 10 000) — the number of test cases.
  
  The first line of each test case contains two integers n (2 ≤ n ≤ 10^5) and k (1 ≤ k ≤ min(n, 100)).
  
  The second line of each test case contains n integers a_1, a_2, …, a_n (0 ≤ a_i ≤ n).
  
  It is guaranteed that the sum of n over all test cases doesn't exceed 3 ⋅ 10^5.
  
  Output
  
  For each test case, print a single integer — the maximum possible value of i ⋅ j - k ⋅ (a_i | a_j).
  
  Example
  
  Input
  
  
  4
  3 3
  1 1 3
  2 2
  1 2
  4 3
  0 1 2 3
  6 6
  3 2 0 0 5 6
  
  
  Output
  
  
  -1
  -4
  3
  12
  
  Note
  
  Let f(i, j) = i ⋅ j - k ⋅ (a_i | a_j).
  
  In the first test case, 
  
    * f(1, 2) = 1 ⋅ 2 - k ⋅ (a_1 | a_2) = 2 - 3 ⋅ (1 | 1) = -1. 
    * f(1, 3) = 1 ⋅ 3 - k ⋅ (a_1 | a_3) = 3 - 3 ⋅ (1 | 3) = -6. 
    * f(2, 3) = 2 ⋅ 3 - k ⋅ (a_2 | a_3) = 6 - 3 ⋅ (1 | 3) = -3. 
  
  
  
  So the maximum is f(1, 2) = -1.
  
  In the fourth test case, the maximum is f(3, 4) = 12.
solution: from sys import maxsize, stdout, stdin,stderr
  mod = int(1e9+7)
  import sys
  def I(): return int(stdin.readline())
  def lint(): return [int(x) for x in stdin.readline().split()]
  def S(): return list(map(str,input().strip()))
  def grid(r, c): return [lint() for i in range(r)]
  from collections import defaultdict, Counter, deque
  import math
  import heapq
  from heapq import heappop , heappush
  import bisect
  from itertools import groupby
  from itertools import permutations as comb
  def gcd(a,b): 
      while b:
          a %= b
          tmp = a
          a = b
          b = tmp
      
      return a
   
  def lcm(a,b): 
      return a  // gcd(a, b) * b
   
  def check_prime(n):
      for i in range(2, int(n ** (1 / 2)) + 1):
          if not n % i:
              return False
      return True
  
  def nCr(n, r):
   
      return (fact(n) // (fact(r)
                  * fact(n - r)))
   
  # Returns factorial of n
  def fact(n):
   
      res = 1
       
      for i in range(2, n+1):
          res = res * i
           
      return res
  def primefactors(n):
      num=0
      
      while n % 2 == 0:
          num+=1
          n = n / 2
      
      for i in range(3,int(math.sqrt(n))+1,2):
           
      
          while n % i== 0:
              num+=1
              n = n // i
                 
      
      if n > 2:
          num+=1
      return num
  '''
  def iter_ds(src):
      store=[src]
      while len(store):
          tmp=store.pop()
          if not vis[tmp]:
              vis[tmp]=True
              for j in ar[tmp]:
                  store.append(j)
  '''
  def ask(a):
      print('? {}'.format(a),flush=True)
      n=I()
      
      return n
  
  
   
  def dfs(i,p):
      
      a,tmp=0,0
      for j in d[i]:
          if j!=p:
              a+=1
              tmp+=dfs(j,i)
      
      if a==0:
          return 0
      
      return tmp/a + 1 
  def primeFactors(n):
      l=[]
      
      while n % 2 == 0:
          l.append(2)
          n = n // 2
      for i in range(3,int(math.sqrt(n))+1,2):
           
          
          while n % i== 0:
              l.append(i)
              n = n // i
  
      if n > 2:
          l.append(n)
      return l
  t = I()
  for _ in range(t):
      n,k = lint()
      s = lint()
      ans=-mod
  
      m=max(0,n-200)
      for i in range(n-1,m-1,-1):
          for j in range(n-1,m-1,-1):
              if i!=j:
  
                  ans=max(ans,((i+1)*(j+1)-(k*(s[i]|s[j]))))
      for i in range(1,n):
          ans=max(ans,((i+1)*(i))-(k*(s[i]|s[i-1])))
      print(ans)
  