#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int n,a[N];
struct node{
int mx,mxid;
int mn,mnid;
};
struct SGT{
node tr[N<<2];
#define lson p<<1,L,mid
#define rson p<<1|1,mid+1,R
#define ls p<<1
#define rs p<<1|1
node merge(node a,node b){
node c;
if(a.mx>=b.mx){
c.mxid=a.mxid;
c.mx=a.mx;
}
else{
c.mxid=b.mxid;
c.mx=b.mx;
}
if(a.mn<b.mn){
c.mnid=a.mnid;
c.mn=a.mn;
}
else{
c.mnid=b.mnid;
c.mn=b.mn;
}
return c;
}
void build(int p,int L,int R){
if(L==R){
tr[p].mx=tr[p].mn=a[L];
tr[p].mxid=tr[p].mnid=L;
return ;
}
int mid=(L+R)>>1;
build(lson);
build(rson);
tr[p]=merge(tr[ls],tr[rs]);
}
node query(int p,int L,int R,int l,int r){
if(l<=L&&r>=R){
return tr[p];
}
int mid=(L+R)>>1;
if(l<=mid&&r<=mid)
return query(lson,l,r);
if(l>mid&&r>mid)
return query(rson,l,r);
return merge(query(lson,l,r),query(rson,l,r));
}
}T;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
if(n<=1){
cout<<"0\n";
return 0;
}
if(n==2){
if(a[1]<a[2])
cout<<"2\n";
else
cout<<"0\n";
return 0;
}
T.build(1,1,n);
int ans=0;
for(int i=1;i<=n;i++){
node t1=T.query(1,1,n,1,i),t2=T.query(1,1,n,i,n);
ans=max(ans,t1.mxid-t1.mnid+1);
ans=max(ans,t2.mxid-t2.mnid+1);
}
cout<<ans<<"\n";
return 0;
}