This task will exclusively concentrate only on the arrays where all elements equal 1 and/or 2.

Array *a* is *k*-period if its length is divisible by *k* and there is such array *b* of length *k*, that *a* is represented by array *b* written exactly <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/e8f8616e518b67af73332593c4c73ae9f207dc04.png" style="max-width: 100.0%;max-height: 100.0%;"/> times consecutively. In other words, array *a* is *k*-periodic, if it has period of length *k*.

For example, any array is *n*-periodic, where *n* is the array length. Array [2, 1, 2, 1, 2, 1] is at the same time 2-periodic and 6-periodic and array [1, 2, 1, 1, 2, 1, 1, 2, 1] is at the same time 3-periodic and 9-periodic.

For the given array *a*, consisting only of numbers one and two, find the minimum number of elements to change to make the array *k*-periodic. If the array already is *k*-periodic, then the required value equals 0.
The first line of the input contains a pair of integers *n*, *k* (1 ≤ *k* ≤ *n* ≤ 100), where *n* is the length of the array and the value *n* is divisible by *k*. The second line contains the sequence of elements of the given array *a*<sub class="lower-index">1</sub>, *a*<sub class="lower-index">2</sub>, ..., *a*<sub class="lower-index">*n*</sub> (1 ≤ *a*<sub class="lower-index">*i*</sub> ≤ 2), *a*<sub class="lower-index">*i*</sub> is the *i*-th element of the array.
#------------------Important Modules------------------#

from sys import stdin,stdout
from bisect import bisect_left as bl
from bisect import bisect_right as br

from heapq import *
input=stdin.readline
#prin=stdout.write
from random import sample
#t=int(input())
t=1
from collections import Counter,deque
from math import sqrt,ceil,log2,gcd
#dist=[0]*(n+1)
class DisjSet: 
    def __init__(self, n): 
        # Constructor to create and 
        # initialize sets of n items 
        self.rank = [1] * n 
        self.parent = [i for i in range(n)] 
  
  
    # Finds set of given item x 
    def find(self, x): 
          
        # Finds the representative of the set 
        # that x is an element of 
        if (self.parent[x] != x): 
              
            # if x is not the parent of itself 
            # Then x is not the representative of 
            # its set, 
            self.parent[x] = self.find(self.parent[x]) 
              
            # so we recursively call Find on its parent 
            # and move i's node directly under the 
            # representative of this set 
  
        return self.parent[x] 
  
  
    # Do union of two sets represented 
    # by x and y. 
    def union(self, x, y): 
          
        # Find current sets of x and y 
        xset = self.find(x) 
        yset = self.find(y) 
  
        # If they are already in same set 
        if xset == yset: 
            return
  
        # Put smaller ranked item under 
        # bigger ranked item if ranks are 
        # different 
        if self.rank[xset] < self.rank[yset]: 
            self.parent[xset] = yset 
  
        elif self.rank[xset] > self.rank[yset]: 
            self.parent[yset] = xset 
  
        # If ranks are same, then move y under 
        # x (doesn't matter which one goes where) 
        # and increment rank of x's tree 
        else: 
            self.parent[yset] = xset 
            self.rank[xset] = self.rank[xset] + 1
  
# Driver code 



def f(arr,i,j,d,dist):
    if i==j:
        return 
    nn=max(arr[i:j])
    for tl in range(i,j):
        if arr[tl]==nn:
            dist[tl]=d
            #print(tl,dist[tl])
            f(arr,i,tl,d+1,dist)
            f(arr,tl+1,j,d+1,dist)
    #return dist
            
        
def ps(n):
    cp=0
    while n%2==0:
        n=n//2
        cp+=1
    for ps in range(3,ceil(sqrt(n))+1,2):
        while n%ps==0:
            n=n//ps
            cp+=1
            
    if n!=1:
        return False
    return True


#count=0
#dp=[[0 for i in range(m)] for j in range(n)]
#[int(x) for x in input().strip().split()]
def find_gcd(x, y): 
      
    while(y): 
        x, y = y, x % y 
      
    return x 
          
# Driver Code         
def factorials(n,r):
    #This calculates ncr mod 10**9+7
    slr=n;dpr=r
    qlr=1;qs=1
    mod=10**9+7
    
    for ip in range(n-r+1,n+1):
        qlr=(qlr*ip)%mod
    for ij in range(1,r+1):
        qs=(qs*ij)%mod
    #print(qlr,qs)
    ans=(qlr*modInverse(qs))%mod
    return ans

        
        
def modInverse(b):
    qr=10**9+7
    return pow(b, qr - 2,qr)

tt=[xa**3 for xa in range(0,10**4+1)]
qq=set(tt)
"""----------The main code starts here----------------"""

for jj in range(t):
    n,k=[int(x) for x in input().strip().split()];
    arr=[int(x) for x in input().strip().split()]
    ans=0
    for i in range(k):
        count1=0;count2=0
        for j in range(i,n,k):
            if arr[j]==1:
                count1+=1
            else:
                count2+=1
        ans+=min(count1,count2)
    print(ans)
            
        
    
    
        
        
        
    
    
    
        
    
    
    
    
    
            
        
        
            
    
    
                
                    
                
                        
                    
            
            
        
                
            
        
    
    
            
    
        
    
    
    
        
        
    
    
            
            
            
        
        
            
        
        
        
    
        
            
            
            
            
    
    
    
            
    
    
        
    
    
    
        
    
    
                   
    
        
                
        
    
        
        
        
        
        
                
    
    
    
    
        
    
    
    
    
        
        
        
        
            
        
    

