/*
这题也是以前做ACM做的 模拟 还有一种是找数学规律 就是通过函数对应的。
这题其实也没什么好写的 但是里面用了stl的list 我从来没用过。。
*/
#include<iostream>
#include<cstdio>
#include<list>
using namespace std;
int LastRemaining(int n,int m)
{
if(n<1 || m<1) return -1;
int i=0;
list<int> num;
for(;i<n;++i)
num.push_back(i);
list<int>::iterator cur=num.begin();
while(num.size()>1)
{
for(int i=1;i<m;++i)
{
cur++;
if(cur==num.end())
cur=num.begin();
}
list<int>::iterator next=++cur;//next指向最后一个的下一个
if(next==num.end())
next=num.begin();
cur--;
num.erase(cur);
cur=next;
}
return * cur;
}
/*
这种方法就是通过数学分析 分析过程挺复杂的 但是代码很简单
思路大概是用f(n,m)表示 从0到n-1 每次删第m个 最后剩下的数字
那么第一次删除的是(m-1)%n
第二次 这个序列就不是原来那种的规则了
我们用一种映射变称规则的 就是P(x)=(x-k-1)%m;
这个映射的逆映射是 p^(x)=(x+k+1)%m;
这样再推导得到 f(n,m)=(f(n-1,m)+m)%n;
*/
int LastRemaining_2(int n,int m)
{
if(n<1 || m<1) return -1;
int ans=0;
for(int i=2;i<=n;++i)
ans=(ans+m)%i;
return ans;
}
int main()
{
int n,m;
cin>>n>>m;
int ans=LastRemaining_2(n,m);
cout<<ans<<endl;
return 0;
}