/*
第 18  题:
题目:n  个数字(0,1,…,n-1)形成一个圆圈,从数字 0  开始,
每次从这个圆圈中删除第 m  个数字(第一个为当前数字本身,第二个为当前数字的下一个
数字)。
当一个数字删除后,从被删除数字的下一个继续删除第 m  个数字。
求出在这个圆圈中剩下的最后一个数字。
*/
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
  int sum,n,m,i,k,a[100];
  
  cin>>n>>m;
  
  printf("原来人为:"); 
  for(i=0;i<n;i++)
    printf("%d ",i);
  printf("\n依次出去的人为:"); 
  
  memset(a,0,sizeof(a));
  k=0;i=0;sum=n;
  //sum是已经出去的人个数 
  //i用来在整个n中循环
  //k递增报数到m,出去一个人 
  while(sum>0)
  {
    if(a[i]!=-1)
    {
      k++;
      if(k==m)
      {
        a[i]=-1;
        printf("%d ",i);
        k=0;
        sum--;
      }
    }
    i++;
    if(i>n-1) i=0;
  }
  return 0;
}
/*
1.第一次移动k个; k%n
2.下一次移动从k+1开始,总数n-1;(f(n-1, m)+k+1)%n 
3.k=m-1, f(n,m)=(f(n-1,m)+m)%n.  f(1, m) = 0; 
*/
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
  int n,m,fn,i;
  
  cin>>n>>m;
  fn=0;
  for(i=2;i<=n;i++)
    fn=(fn+m)%i;
  printf("%d\n",fn);
  return 0;
}