#include <cstdio>

int tree[1<<23];
int n,k, ans;

inline void init_tree(){
    for(int i=n; i<2*n; ++i){
        tree[i]=1;
    }
    for(int i=n-1; i; --i){
        int j=i<<1;
        tree[i]=tree[j]+tree[j|1];
    }
    return;
}

int find_kth(int k, int v=1){
   if(v>=n){
       return v-n+1;
   }
   int left=v<<1, left_value=tree[left];
   if(left_value>=k){
       return find_kth(k, left);
   }
   return find_kth(k-left_value, left|1);
}

void decrement(int pos){
     pos+=n-1;
     while(pos){
        --tree[pos];
        pos>>=1;
     }
}

int main(){
    scanf("%d%d",&n,&k);
    init_tree();
    int k2=k-2;
    int cur=1;
    int shift=find_kth(1);
    for(int i=1; i<=n; ++i){
        cur=1+(cur+k2)%(n-i+1);
        int x=find_kth(cur);
        int real_x=(x-shift+n)%n+1;
        decrement(x);
        int y=real_x-i;
        int mask=y>>31;
        ans^=(y+mask)^mask;
    }
    printf("%d",ans);
    return 0;
}
