#include<cstdio>
#include<vector>
#include<unordered_set>
using namespace std;
#define Ls(i,l,r) for(int i=l;i<r;++i)
#define Rs(i,l,r) for(int i=l;i>r;--i)
#define Le(i,l,r) for(int i=l;i<=r;++i)
#define Re(i,l,r) for(int i=l;i>=r;--i)
#define L(i,l) for(int i=0;i<l;++i)
#define E(i,l) for(int i=1;i<=l;++i)
#define W(t) while(t--)
int n,d,nd;
vector<pair<int,int>>ans;
unordered_set<pair<int,int> >st;
int main(){
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
// ios::sync_with_stdio(0);
// cin.tie(0);
// cout.tie(0);
#endif
// Insert Code Here
scanf("%d%d",&n,&d);
nd=n*d;
if(n*(n-1ll)/2<n*d)return puts("No"),0;
E(i, n){
int cnt=0;
E(j, n){
if(cnt==d+1)break;
if(j!=i&&st.find({i,j})!=st.end())
ans.push_back({i,j}),
st.insert({i,j}),
--nd,++cnt,
st.insert({j,i});
}
}
for(int i=1;i<=n&&nd;++i){
for(int j=1;j<=n&&nd;++j){
if(j!=i&&st.find({i,j})!=st.end())
ans.push_back({i,j}),
st.insert({i,j}),
--nd,
st.insert({j,i});
}
}
if(ans.size()>nd)return puts("No"),0;
puts("Yes");
for(auto v:ans)printf("%d %d\n",v.first,v.second);
return 0;
}
这段代码 unordered_set 那里为什么会 CE