时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
            空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
             64bit IO Format: %lld
        
     
    题目描述
        
        
    
            
            给定一个正整数序列 

.  定义子序列为该序列按序保留若干项(非空) 后构成的序列,例如对于序列 

 等都是其子序列。 
 定义一个子序列的权值为序列内所有数的最大公因数,请求出权值前 k 大的子序列(若权值相同,按选取下标的字典序从小到大排列)。特别地,由于输出量可能过大, 你只需要输出这这些子序列中每个子序列选取下标乘积的和即可。对 

 取模。
 
                            输入描述:
                                                    第一行两个数 
.
接下来一行 n 个数,第 i 个数为数列 
.
                                                                            输出描述:
                                                    输出一个数,表示 GCD 前 k 大的子序列选取下标乘积的和。若不存在前 k 大的子序列,输出 -1.
                                                                            
                        
                            示例1
                        
                        
                            
                                输入
                                复制
                                
                                
                                    20 10000
18 12 16 20 8 20 2 12 20 2 14 20 14 16 12 8 20 16 14 20