#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll nmax=1e5+5;
ll n,m,k[nmax]; ll sz;
struct Node {
ll key, prior;
ll cnt, size;
Node *l, *r;
Node(ll k): key(k), prior(rand()), cnt(1), size(1), l(nullptr), r(nullptr) {}
};
ll getSize(Node* t) { return t ? t->size : 0; }
void upd(Node* t) { if (t) t->size = getSize(t->l) + getSize(t->r) + t->cnt; }
Node* merge(Node* l, Node* r) {
if (!l || !r) return l ? l : r;
if (l->prior > r->prior) {
l->r = merge(l->r, r); upd(l); return l;
} else {
r->l = merge(l, r->l); upd(r); return r;
}
}
void split(Node* t, ll key, Node* &l, Node* &r) {
if (!t) l = r = nullptr;
else if (key < t->key) {
split(t->l, key, l, t->l);
r = t; upd(t);
} else {
split(t->r, key, t->r, r);
l = t; upd(t);
}
}
struct OrderedSet {
Node* root = nullptr;
void insert(ll key) {
Node *l, *r;
split(root, key, l, r);
Node *tl, *tr;
split(l, key-1, tl, tr);
if (tr) { tr->cnt++; upd(tr); l = merge(tl, tr); }
else l = merge(tl, new Node(key));
root = merge(l, r); upd(root);
}
void erase(ll key) {
Node *l, *r;
split(root, key, l, r);
Node *tl, *tr;
split(l, key-1, tl, tr);
if (tr) {
if (tr->cnt > 1) { tr->cnt--; upd(tr); }
else { delete tr; tr = nullptr; }
}
l = merge(tl, tr);
root = merge(l, r); upd(root);
}
ll order_of_key(ll x) {
Node* t = root;
ll res = 0;
while (t) {
if (x <= t->key) t = t->l;
else {
res += getSize(t->l) + t->cnt;
t = t->r;
}
}
return res;
}
ll find_by_order(ll k) {
Node* t = root;
while (t) {
if (k < getSize(t->l)) t = t->l;
else if (k < getSize(t->l) + t->cnt) return t->key;
else {
k -= getSize(t->l) + t->cnt;
t = t->r;
}
}
return -1; // không tồn tại
}
ll size() { return getSize(root); }
bool empty() { return size() == 0; }
};
/*
OrderedSet os;
os.insert(5);
os.insert(2);
os.insert(7);
os.insert(5); // cho phép trùng
cout << "size = " << os.size() << "\n"; // 4
cout << "order_of_key(6) = " << os.order_of_key(6) << "\n"; // số phần tử < 6
cout << "find_by_order(1) = " << os.find_by_order(1) << "\n"; // phần tử có index 1
os.erase(5);
cout << "size sau erase = " << os.size() << "\n";
*/
OrderedSet os;
void inp(){
cin>>n>>m;
for(ll i=1;i<=m;++i)
cin>>k[i];
return;
}
ll res[nmax];
ll BIT[nmax];
map<ll,ll> mp;
void update(ll s){
while(s<nmax){
++BIT[s];
s+=(s&(-s));
}
return;
}
ll get(ll s){
ll sum=0;
while(s>0LL){
sum+=BIT[s];
s-=(s&(-s));
}
return sum;
}
void prepare(){
for(ll i=1;i<=m;++i){
ll l=1,r=(n*(n-1LL))/2LL,mid;
while(l<=r){
mid=(l+r)/2LL;
ll sl=os.order_of_key(mid+1LL);
//cout<<i<<' '<<mid<<' '<<sl<<" ok \n";
if(mid-sl>=k[i]){
res[i]=mid;
r=mid-1LL;
}else
l=mid+1LL;
}
os.insert(res[i]);
}
//cout<<"WWW\n";
return;
}
void solve(){
for(ll i=1;i<=m;++i){
ll l=1,r=n,mid;
ll id=0;
while(l<=r){
mid=(l+r)/2LL;
if(n*mid-(mid*(mid+1LL))/2LL < res[i]){
id=mid;
l=mid+1LL;
}else
r=mid-1LL;
}
res[i]-=(n*id-(id*(id+1LL))/2LL);
cout<<id+1LL<<' '<<id+1LL+res[i]<<'\n';
}
return;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
inp();
prepare();
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwpjb25zdCBsbCBubWF4PTFlNSs1OwpsbCBuLG0sa1tubWF4XTsgbGwgc3o7CnN0cnVjdCBOb2RlIHsKICAgIGxsIGtleSwgcHJpb3I7CiAgICBsbCBjbnQsIHNpemU7CiAgICBOb2RlICpsLCAqcjsKICAgIE5vZGUobGwgayk6IGtleShrKSwgcHJpb3IocmFuZCgpKSwgY250KDEpLCBzaXplKDEpLCBsKG51bGxwdHIpLCByKG51bGxwdHIpIHt9Cn07CgpsbCBnZXRTaXplKE5vZGUqIHQpIHsgcmV0dXJuIHQgPyB0LT5zaXplIDogMDsgfQp2b2lkIHVwZChOb2RlKiB0KSB7IGlmICh0KSB0LT5zaXplID0gZ2V0U2l6ZSh0LT5sKSArIGdldFNpemUodC0+cikgKyB0LT5jbnQ7IH0KCk5vZGUqIG1lcmdlKE5vZGUqIGwsIE5vZGUqIHIpIHsKICAgIGlmICghbCB8fCAhcikgcmV0dXJuIGwgPyBsIDogcjsKICAgIGlmIChsLT5wcmlvciA+IHItPnByaW9yKSB7CiAgICAgICAgbC0+ciA9IG1lcmdlKGwtPnIsIHIpOyB1cGQobCk7IHJldHVybiBsOwogICAgfSBlbHNlIHsKICAgICAgICByLT5sID0gbWVyZ2UobCwgci0+bCk7IHVwZChyKTsgcmV0dXJuIHI7CiAgICB9Cn0KCnZvaWQgc3BsaXQoTm9kZSogdCwgbGwga2V5LCBOb2RlKiAmbCwgTm9kZSogJnIpIHsKICAgIGlmICghdCkgbCA9IHIgPSBudWxscHRyOwogICAgZWxzZSBpZiAoa2V5IDwgdC0+a2V5KSB7CiAgICAgICAgc3BsaXQodC0+bCwga2V5LCBsLCB0LT5sKTsKICAgICAgICByID0gdDsgdXBkKHQpOwogICAgfSBlbHNlIHsKICAgICAgICBzcGxpdCh0LT5yLCBrZXksIHQtPnIsIHIpOwogICAgICAgIGwgPSB0OyB1cGQodCk7CiAgICB9Cn0KCnN0cnVjdCBPcmRlcmVkU2V0IHsKICAgIE5vZGUqIHJvb3QgPSBudWxscHRyOwoKICAgIHZvaWQgaW5zZXJ0KGxsIGtleSkgewogICAgICAgIE5vZGUgKmwsICpyOwogICAgICAgIHNwbGl0KHJvb3QsIGtleSwgbCwgcik7CiAgICAgICAgTm9kZSAqdGwsICp0cjsKICAgICAgICBzcGxpdChsLCBrZXktMSwgdGwsIHRyKTsKICAgICAgICBpZiAodHIpIHsgdHItPmNudCsrOyB1cGQodHIpOyBsID0gbWVyZ2UodGwsIHRyKTsgfQogICAgICAgIGVsc2UgbCA9IG1lcmdlKHRsLCBuZXcgTm9kZShrZXkpKTsKICAgICAgICByb290ID0gbWVyZ2UobCwgcik7IHVwZChyb290KTsKICAgIH0KCiAgICB2b2lkIGVyYXNlKGxsIGtleSkgewogICAgICAgIE5vZGUgKmwsICpyOwogICAgICAgIHNwbGl0KHJvb3QsIGtleSwgbCwgcik7CiAgICAgICAgTm9kZSAqdGwsICp0cjsKICAgICAgICBzcGxpdChsLCBrZXktMSwgdGwsIHRyKTsKICAgICAgICBpZiAodHIpIHsKICAgICAgICAgICAgaWYgKHRyLT5jbnQgPiAxKSB7IHRyLT5jbnQtLTsgdXBkKHRyKTsgfQogICAgICAgICAgICBlbHNlIHsgZGVsZXRlIHRyOyB0ciA9IG51bGxwdHI7IH0KICAgICAgICB9CiAgICAgICAgbCA9IG1lcmdlKHRsLCB0cik7CiAgICAgICAgcm9vdCA9IG1lcmdlKGwsIHIpOyB1cGQocm9vdCk7CiAgICB9CgogICAgbGwgb3JkZXJfb2Zfa2V5KGxsIHgpIHsKICAgICAgICBOb2RlKiB0ID0gcm9vdDsKICAgICAgICBsbCByZXMgPSAwOwogICAgICAgIHdoaWxlICh0KSB7CiAgICAgICAgICAgIGlmICh4IDw9IHQtPmtleSkgdCA9IHQtPmw7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmVzICs9IGdldFNpemUodC0+bCkgKyB0LT5jbnQ7CiAgICAgICAgICAgICAgICB0ID0gdC0+cjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgfQoKICAgIGxsIGZpbmRfYnlfb3JkZXIobGwgaykgewogICAgICAgIE5vZGUqIHQgPSByb290OwogICAgICAgIHdoaWxlICh0KSB7CiAgICAgICAgICAgIGlmIChrIDwgZ2V0U2l6ZSh0LT5sKSkgdCA9IHQtPmw7CiAgICAgICAgICAgIGVsc2UgaWYgKGsgPCBnZXRTaXplKHQtPmwpICsgdC0+Y250KSByZXR1cm4gdC0+a2V5OwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGsgLT0gZ2V0U2l6ZSh0LT5sKSArIHQtPmNudDsKICAgICAgICAgICAgICAgIHQgPSB0LT5yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsgLy8ga2jDtG5nIHThu5NuIHThuqFpCiAgICB9CgogICAgbGwgc2l6ZSgpIHsgcmV0dXJuIGdldFNpemUocm9vdCk7IH0KICAgIGJvb2wgZW1wdHkoKSB7IHJldHVybiBzaXplKCkgPT0gMDsgfQp9OwoKLyoKICAgIE9yZGVyZWRTZXQgb3M7CiAgICBvcy5pbnNlcnQoNSk7CiAgICBvcy5pbnNlcnQoMik7CiAgICBvcy5pbnNlcnQoNyk7CiAgICBvcy5pbnNlcnQoNSk7IC8vIGNobyBwaMOpcCB0csO5bmcKCiAgICBjb3V0IDw8ICJzaXplID0gIiA8PCBvcy5zaXplKCkgPDwgIlxuIjsgLy8gNAogICAgY291dCA8PCAib3JkZXJfb2Zfa2V5KDYpID0gIiA8PCBvcy5vcmRlcl9vZl9rZXkoNikgPDwgIlxuIjsgLy8gc+G7kSBwaOG6p24gdOG7rSA8IDYKICAgIGNvdXQgPDwgImZpbmRfYnlfb3JkZXIoMSkgPSAiIDw8IG9zLmZpbmRfYnlfb3JkZXIoMSkgPDwgIlxuIjsgLy8gcGjhuqduIHThu60gY8OzIGluZGV4IDEKCiAgICBvcy5lcmFzZSg1KTsKICAgIGNvdXQgPDwgInNpemUgc2F1IGVyYXNlID0gIiA8PCBvcy5zaXplKCkgPDwgIlxuIjsKICAgICovCk9yZGVyZWRTZXQgb3M7CnZvaWQgaW5wKCl7CiAgICBjaW4+Pm4+Pm07CiAgICBmb3IobGwgaT0xO2k8PW07KytpKQogICAgICAgIGNpbj4+a1tpXTsKICAgIHJldHVybjsKfQpsbCByZXNbbm1heF07CmxsIEJJVFtubWF4XTsKbWFwPGxsLGxsPiBtcDsKdm9pZCB1cGRhdGUobGwgcyl7CiAgICB3aGlsZShzPG5tYXgpewogICAgICAgICsrQklUW3NdOwogICAgICAgIHMrPShzJigtcykpOwogICAgfQogICAgcmV0dXJuOwp9CmxsIGdldChsbCBzKXsKICAgIGxsIHN1bT0wOwogICAgd2hpbGUocz4wTEwpewogICAgICAgIHN1bSs9QklUW3NdOwogICAgICAgIHMtPShzJigtcykpOwogICAgfQogICAgcmV0dXJuIHN1bTsKfQp2b2lkIHByZXBhcmUoKXsKICAgIGZvcihsbCBpPTE7aTw9bTsrK2kpewogICAgICAgIGxsIGw9MSxyPShuKihuLTFMTCkpLzJMTCxtaWQ7CiAgICAgICAgd2hpbGUobDw9cil7CiAgICAgICAgICAgIG1pZD0obCtyKS8yTEw7CiAgICAgICAgICAgIGxsIHNsPW9zLm9yZGVyX29mX2tleShtaWQrMUxMKTsKICAgICAgICAgICAgLy9jb3V0PDxpPDwnICc8PG1pZDw8JyAnPDxzbDw8IiBvayBcbiI7CiAgICAgICAgICAgIGlmKG1pZC1zbD49a1tpXSl7CiAgICAgICAgICAgICAgICByZXNbaV09bWlkOwogICAgICAgICAgICAgICAgcj1taWQtMUxMOwogICAgICAgICAgICB9ZWxzZQogICAgICAgICAgICAgICAgbD1taWQrMUxMOwoKICAgICAgICB9CiAgICAgICAgb3MuaW5zZXJ0KHJlc1tpXSk7CiAgICB9CiAgICAvL2NvdXQ8PCJXV1dcbiI7CiAgICByZXR1cm47Cn0Kdm9pZCBzb2x2ZSgpewogICAgZm9yKGxsIGk9MTtpPD1tOysraSl7CiAgICAgICAgbGwgbD0xLHI9bixtaWQ7CiAgICAgICAgbGwgaWQ9MDsKICAgICAgICB3aGlsZShsPD1yKXsKICAgICAgICAgICAgbWlkPShsK3IpLzJMTDsKICAgICAgICAgICAgaWYobiptaWQtKG1pZCoobWlkKzFMTCkpLzJMTCA8IHJlc1tpXSl7CiAgICAgICAgICAgICAgICBpZD1taWQ7CiAgICAgICAgICAgICAgICBsPW1pZCsxTEw7CiAgICAgICAgICAgIH1lbHNlCiAgICAgICAgICAgICAgICByPW1pZC0xTEw7CiAgICAgICAgfQogICAgICAgIHJlc1tpXS09KG4qaWQtKGlkKihpZCsxTEwpKS8yTEwpOwogICAgICAgIGNvdXQ8PGlkKzFMTDw8JyAnPDxpZCsxTEwrcmVzW2ldPDwnXG4nOwogICAgfQogICAgcmV0dXJuOwp9CmludCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpbnAoKTsKICAgIHByZXBhcmUoKTsKICAgIHNvbHZlKCk7CiAgICByZXR1cm4gMDsKfQ==